我尝试通过事件在Web视图中执行android中的代码。所以我用JavascriptInterface实现了好方法,但由于我有一个iOS应用程序,我想使用相同的方法。那么这可能是在Android上使用消息处理程序(只是一个简单的JS事件)而不是接口的桥接吗? 我也尝试过另一种方式:在iOS上以与Android相同的方式建立一个桥梁,但它不适用于WKWebview(但这是另一个问题) 谢谢!
答案 0 :(得分:1)
不建议这样做,如果您可以选择更改 JS 代码并添加条件处理程序,则应改为这样做。
如果您已经使用 userContentController
在 iOS 中实现了处理程序并希望在 Android 中重用它,您可以注入 JS 以将 window.webkit.messageHandlers
属性替换为您的 android 等效项。
说这是您的 swift 代码:
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} }") {}
}
}
}