首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android上处理webkit.messageHandler postMessage

在Android上处理webkit.messageHandler postMessage
EN

Stack Overflow用户
提问于 2016-09-28 10:03:00
回答 1查看 3.8K关注 0票数 8

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

EN

Stack Overflow用户

发布于 2021-05-27 12:16:49

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

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

说这是你的快速密码:

代码语言:javascript
运行
复制
webView.configuration.userContentController.add(self, name: "iosListener")

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
  //handle message
}

你的JS代码:

代码语言:javascript
运行
复制
window.webkit.messageHandlers.iosListener.postMessage("some message")

您可以在android/kotlin中重用它,而无需像这样更改JS代码:

代码语言:javascript
运行
复制
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} }") {}
        }
    }
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39744248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档