WKWebView 里 JS 和 native 通信的例子

摘要:初始化 wkwebview,设置 message handler,native 端注册了 testecho 的messageHandler,实现 WKScriptMessageHandler协议,执行JS 代码 ,所以 JS 可以通过 window.webkit.messageHandlers.testecho.postMessage 来回调客户端,和文档中说的一样

native 端

初始化 wkwebview,设置 message handler  

webView = WKWebView.init()
let usecc = self.webView.configuration.userContentController
usecc.add(self, name: "testecho")


实现 WKScriptMessageHandler协议

extension ViewController: WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        mylog("\(self.sendCount) call native , message is \(message.name),")
    }
}


执行JS 代码  

//jsStr = "echo(\"wordword\")"
self.webView.evaluateJavaScript(jsStr) { (result, err) in
    self.mylog("\(self.sendCount) \(jsStr.count) bytes callback, result: \(result), err: \(err)")
}


前端

<!DOCTYPE html>
<html>
<script type="text/javascript">
    function echo(str) {
        console.log(str);
        window.webkit.messageHandlers.testecho.postMessage(str);
}
</script>
<body>
<input type="button" onClick="echo('toast clicked')" value="toast">
<input type="button" onClick="echo('alert clicked')" value="Alert">
</body>

</html>


分析

native 端注册了 testecho 的messageHandler,所以 JS 可以通过 window.webkit.messageHandlers.testecho.postMessage 来回调客户端,和文档中说的一样。

地址:https://www.cnblogs.com/huahuahu/p/WKWebView-li-JS-he-native-tong-xin-de-li-zi.html  


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_1313