zar*_*hol 7 javascript android webkit
我试图通过事件从 web 视图执行 android 中的代码。所以我用 JavascriptInterface 实现了这个好方法,但由于我有一个 iOS 应用程序,我想使用相同的方法。那么这是否可以在 Android 上使用消息处理程序(只是一个简单的 JS 事件)而不是接口的桥接?我也尝试过另一种方式:在 iOS 上以与 Android 相同的方式构建桥梁,但它不适用于 WKWebview(但这是另一个问题)谢谢!
不建议这样做,如果您可以选择更改 JS 代码并添加条件处理程序,则应该这样做。
If you have implemented a handler in iOS using userContentController and want to reuse it in Android, you can inject JS to replace the window.webkit.messageHandlers property with your android equivalent.
Say this is your swift code:
webView.configuration.userContentController.add(self, name: "iosListener")
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
//handle message
}
Run Code Online (Sandbox Code Playgroud)
And your JS code:
window.webkit.messageHandlers.iosListener.postMessage("some message")
Run Code Online (Sandbox Code Playgroud)
You can reuse it in android/kotlin without changing your JS code like this:
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} }") {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1611 次 |
| 最近记录: |