天天看点

Swift WKWebView 与JS交互

1.WKWebView调用JS方法(包括参数传递与回传)

WKWebView方法

//jsmessage为js方法返回值  err为错误信息   jsHandlerFunc为JS中的方法   ---- 为webview传递给JS的参数
 webview.evaluateJavaScript("jsHandlerFunc(\"----\")") { (jsmessage, err) in
            
print(jsmessage)
}
复制代码
           

JS方法

<script type="text/javascript">
      function jsHandlerFunc(message) {
          //显示webview传参(message) return "xxxxx" 为js回传给webview的参数 (jsmessage)
            document.getElementById('js-content').innerHTML = "jsdajjadsfjsfjasdj" + message;
            return "xxxxx"
        }
</script>
复制代码
           

还有一种方法是使用WKUserScript 大家自行研究

2.JS调用webview

WKWebView方法

webview.configuration.userContentController.add(self, name: "nativeMethod")

复制代码
           

实现WKScriptMessageHandler协议下面的方法

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        
        print(message)//WKScriptMessage对象
        print(message.name) //name : nativeMethod
        print(message.body) //js回传参数
    }
复制代码
           

JS方法

<script type="text/javascript">
      function nativeClick(){
        window.webkit.messageHandlers.nativeMethod.postMessage({body: 'paramters'});
    }
</script>
复制代码
           

注意:要记得移除添加的nativeMethod 不然会引起内存泄露

webview.configuration.userContentController.removeScriptMessageHandler(forName:"nativeMethod")

复制代码
           

那么怎样从js调用Swift的方法然后再得到返回值呢

最笨的方法,js调用Swift 后,再用Swift调用js传值

继续阅读