美文网首页
iOS-Swift WKWebView 与H5交互

iOS-Swift WKWebView 与H5交互

作者: 梦醒了i77 | 来源:发表于2020-03-19 16:01 被阅读0次

    引子:最近项目赶时间,有些界面由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交互

          本文链接:https://www.haomeiwen.com/subject/umjlyhtx.html