Android 如何在FlatterWebView或InAppWebView中添加JavaScriptInterface?

Android 如何在FlatterWebView或InAppWebView中添加JavaScriptInterface?,android,flutter,dart,webview,Android,Flutter,Dart,Webview,在Android中,我可以添加javascript界面: class JsInterface(private val onClose: () -> Unit) { @android.webkit.JavascriptInterface fun close() { onClose() } } ... addJavascriptInterface(JsInterface { this@WebViewActivity.finish() },

在Android中,我可以添加javascript界面:

class JsInterface(private val onClose: () -> Unit) {
    @android.webkit.JavascriptInterface    
    fun close() {
        onClose()    
    }
}
...
addJavascriptInterface(JsInterface { this@WebViewActivity.finish() }, "client")
在Flatter WebView或InAppWebView或其他软件包中,我如何才能做到同样的

我建议您阅读这篇文章,在这里他们可以更仔细地查看
Flatter\u InAppWebView
。但请尝试以下代码示例以快速回答:

              InAppWebView(
                initialUrl: 'url',
                onWebViewCreated: (controller) =>
                    control.webController = controller
                      ..addJavaScriptHandler(
                        handlerName: 'serverSideJsFuncName',
                        callback: (data) {
                          // Catch and handle js function
                        },
                      ),
              )
另一方面,如果您想更新服务器端JavaScript,可以通过
InAppWebViewController
这样做:

  Future<void> evalJs(dynamic param) async {
    await webController.evaluateJavascript(
        source: "window.someFuncName( '$param ');");
  }

Future evalJs(动态参数)异步{
等待webController.evaluateJavascript(
来源:“window.someFuncName(“$param”);”;
}

谢谢!在js端运行以下代码:“if(window.client)window.client.close()”if just write“.addJavaScriptHandler(handleName:'close',callback:(data){…})”它不工作。你知道怎么做吗?对不起,我想我做不到。尝试从应用程序针对服务器调试您的操作。我们也遇到了一些问题,直到我们找到了从每个手机和后端通过名称访问功能的正确方法。试试我在JavascriptHandlers部分发布的文章。也许你们知道如何通过evaluate添加js接口?evaluate用于从应用程序调用服务器上的一些javascript函数。如果你想处理这样的函数,你必须像这样定义它:window.addEventListener(“FlatterInAppWebViewPlatformReady”,function(event){window.flatter\u inappwebview.callHandler('handlerFoo')。然后(function(result){//appwebview.callHandler('handlerFooWithArgs',1,true,['bar',5],{foo:'baz'},result);})中的数据输出窗口打印到控制台;每个函数必须具有“addEventListener”('flatterInAppWebViewPlatformReady',…”和window.flatter_inappwebview.callHandler('handlerFoo')将由该WebView注册。然后,您可以通过调用我在示例中编写的方法来调用它,但您将输入“handlerFoo”,而不是“someFuncName”。在此之后,您应该能够从应用程序处理JS。