WKWebView 里 JS 和 native 通信的例子

Posted huahuahu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WKWebView 里 JS 和 native 通信的例子相关的知识,希望对你有一定的参考价值。

native 端

  1. 初始化 wkwebview,设置 message handler

    webView = WKWebView.init()
    let usecc = self.webView.configuration.userContentController
    usecc.add(self, name: "testecho")
    
  2. 实现 WKScriptMessageHandler协议

    extension ViewController: WKScriptMessageHandler {
        func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
            mylog("(self.sendCount) call native , message is (message.name),")
        }
    }
    
  3. 执行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 来回调客户端,和文档中说的一样。

Adding a script message handler with name name causes the JavaScript function window.webkit.messageHandlers.name.postMessage(messageBody) to be defined in all frames in all web views that use the user content controller.

参考

以上是关于WKWebView 里 JS 和 native 通信的例子的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView js方法的使用

WKWebView与js交互之完美解决方案

EasyJSWebView原理分析

WKWebView与js交互之完美解决方案

如何辨别webview页面

iOS H5 容器的一些探究:UIWebView 和 WKWebView 的比较和选择