如何在 Flutter WebView 或 InAppWebView 中添加 JavaScriptInterface?
How to add JavaScriptInterface in Flutter WebView or InAppWebView?
在Android我可以添加javascript接口:
class JsInterface(private val onClose: () -> Unit) {
@android.webkit.JavascriptInterface
fun close() {
onClose()
}
}
...
addJavascriptInterface(JsInterface { this@WebViewActivity.finish() }, "client")
如何在 Flutter WebView 或 InAppWebView 或其他包中执行相同?
我建议您阅读 this 文章,他们会在其中仔细研究 flutter_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 ');");
}
在Android我可以添加javascript接口:
class JsInterface(private val onClose: () -> Unit) {
@android.webkit.JavascriptInterface
fun close() {
onClose()
}
}
...
addJavascriptInterface(JsInterface { this@WebViewActivity.finish() }, "client")
如何在 Flutter WebView 或 InAppWebView 或其他包中执行相同?
我建议您阅读 this 文章,他们会在其中仔细研究 flutter_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 ');");
}