iOS-Swift WKWebView 与H5交互

引子:最近项目赶时间,有些界面由H5替代。

  • 2019年下半年开始提交审核如果包含UIWebView,Apple review会发送一封邮件告诉你,UIWebView过时了

  • 方案1 开源框架WebViewJavaScriptBridge

    • 很多文章都在推荐使用github star也很高
    • 方法使用也简单
  • 方案2 使用原生的WKScriptMessageHandler

  • 参考:https://www.jianshu.com/p/905b40e609e2

最后我使用了方案二

  • swift段
/// 注册
override func viewWillAppear(_ animated: Bool) {
  viewWeb.configuration.userContentController.add(self, name: "iOS_isLogin")
}

/// 移除
override func viewWillDisappear(_ animated: Bool) {
  viewWeb.configuration.userContentController.removeScriptMessageHandler(forName: "iOS_isLogin")
}

/// 接收消息处理
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        let key = message.name
        if key.elementsEqual("iOS_jumpLogin") {
          //如果有需要回调 调用js方法
          let js_isLogin = String(format: "get_iOS_isLogin('%d')", JTUserManager.shared.isLogin())
            viewWeb.evaluateJavaScript(js_isLogin) { (_, _) in
          }
        }
 }

js段


//调用oc方法
window.webkit.messageHandlers.iOS_isLogin.postMessage("iOS_isLogin");

// 是否登陆 回调get_iOS_isLogin
function iOS_isLogin() {
    loadURL("iOS_isLogin");
}

// 回调get_iOS_isLogin
function get_iOS_isLogin(params) {
    return document.getElementById("returnValue").innerHTML = params;
}

你可能感兴趣的:(iOS-Swift WKWebView 与H5交互)