Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Android上处理webkit.messageHandler postMessage_Javascript_Android_Webkit - Fatal编程技术网

Javascript 在Android上处理webkit.messageHandler postMessage

Javascript 在Android上处理webkit.messageHandler postMessage,javascript,android,webkit,Javascript,Android,Webkit,我试图通过事件从web视图在android中执行代码。所以我用JavascriptInterface实现了这个好方法,但是因为我有一个iOS应用程序,所以我想使用相同的方法。那么,在Android上使用消息处理程序(只是一个简单的JS事件)而不是桥接接口,这是可能的吗? 我也尝试了另一种方法:在iOS上搭建一座与Android相同的桥梁,但它不适用于WKWebview(但这是另一个问题) 谢谢 不建议这样做,如果您可以选择更改JS代码并添加条件处理程序,则应该这样做 如果您已经使用userCon

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

不建议这样做,如果您可以选择更改JS代码并添加条件处理程序,则应该这样做

如果您已经使用
userContentController
在iOS中实现了一个处理程序,并且希望在Android中重用它,那么您可以注入JS,用您的Android等价物替换
window.webkit.messageHandlers
属性

说这是你的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} }") {}
        }
    }
}

你找到解决这个问题的办法了吗?我对这个也很感兴趣。。你找到解决方案了吗?嗨,没有,我目前使用JavascriptInterface。。。