gpt4 book ai didi

javascript - 在 Android 上处理 webkit.messageHandler postMessage

转载 作者:行者123 更新时间:2023-12-04 11:32:13 24 4
gpt4 key购买 nike

我试图通过事件从 web View 中执行 android 中的代码。所以我用 JavascriptInterface 实现了一个好方法,但是因为我有一个 iOS 应用程序,所以我想使用相同的方法。那么这是否可以在Android上使用消息处理程序(只是一个简单的JS事件)而不是接口(interface)的桥接?
我也尝试过另一种方式:在 iOS 上以与 Android 相同的方式搭建桥梁,但它不适用于 WKWebview(但这是另一个问题)
谢谢 !

最佳答案

不建议这样做,如果您可以选择更改 JS 代码并添加条件处理程序,则应该这样做。
如果您在 iOS 中使用 userContentController 实现了处理程序并且想在Android中复用,可以注入(inject)JS来替换window.webkit.messageHandlers与您的 android 等效的属性。
说这是你的快速代码:

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} }") {}
}
}
}

关于javascript - 在 Android 上处理 webkit.messageHandler postMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39744248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com