我试图通过事件从web视图执行android代码。所以我用JavascriptInterface实现了这个好方法,但是由于我有一个iOS应用程序,所以我想使用相同的方法。那么,这有可能在Android上使用消息处理程序(只是一个简单的JS事件),而不是连接接口吗?我也尝试了另一种方式:在iOS上用安卓的方式搭建一座桥,但是它不适用于WKWebview (但这是另一个问题)--谢谢!
发布于 2021-05-27 12:16:49
不建议这样做,如果您可以选择更改JS代码并添加一个条件处理程序,则应该这样做。
如果您已经在iOS中使用userContentController
实现了一个处理程序,并且希望在Android中重用它,您可以注入JS来用您的android等效项替换window.webkit.messageHandlers
属性。
说这是你的快速密码:
webView.configuration.userContentController.add(self, name: "iosListener")
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
//handle message
}
你的JS代码:
window.webkit.messageHandlers.iosListener.postMessage("some message")
您可以在android/kotlin中重用它,而无需像这样更改JS代码:
inner class MyJsInterface() {
@JavascriptInterface
fun postMessage(value: String) {
//handle message
}
}
webView.run {
settings.javaScriptEnabled = true
addJavascriptInterface(MyJsInterface(), "AndroidListener")
webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
evaluateJavascript("window.webkit = { messageHandlers: { iosListener: window.AndroidListener} }") {}
}
}
}
https://stackoverflow.com/questions/39744248
复制相似问题