Android 如何在FlatterWebView或InAppWebView中添加JavaScriptInterface?
在Android中,我可以添加javascript界面: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() },
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。