美文网首页
严谨写代码态度的养成

严谨写代码态度的养成

作者: LD_左岸 | 来源:发表于2018-07-06 09:55 被阅读33次

    前提应用场景非常简单

    • WKWebView加载前端写好的H5的链接
      由于H5这块采用的是Vue.js所有我们之前的js调用OC的方式
     WKUserContentController *userCC = config.userContentController;
     //JS调用OC 添加处理脚本
     [userCC addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"iosAnswer"];
    
    //JS调OC----->OC里调用JS的方法 既能把JS的方法改掉 又能把JS的参数传递过来
    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
        if ([message.name isEqualToString:@"iosAnswer"]) {
        
    }
    
    - (void)dealloc
    {
         [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"iosAnswer"];
    }
    
    • 这么好用的方式不行了 所以我和前端这块约定的是采用另外一种JS调用OC的方式 也就是
    // 在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
        //decisionHandler(WKNavigationActionPolicyAllow);
        NSURL * URL = navigationAction.request.URL;
        if ([URL.absoluteString hasPrefix:@"iosAnswer"]) {
    }
    

    通过上述方式来实现JS调用OC的
    看起来并无任何问题 然而问题就出在细节上 此处与本文题目暗暗想合了.....

    先介绍下问题的现象 很奇怪 让人一时丈二脑袋摸不到头脑

    • 总的一句话概括就是 一下这个方法不执行
    // 页面加载完成之后调用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    }
    

    以下两个方法都执行

    // 页面开始加载时调用
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
        [MBProgressHUD showMessage:@"加载中"];
        
    }
    // 当内容开始返回时调用
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
        [MBProgressHUD hideHUD];
    }
    

    这个问题在开发过程中遇见过一次 当时也没在意 感觉这个方法类似于系统的回调事件 这我也不好干预不是 当时就忽略了下手机的wifi🈶重新连接了下wifi就好了 所以当时也没当回事
    开发遇见没当回事啊
    长期的测试过程中一直是链接的内网ip也一直没出现过 这个加载完的代理不回调的事情
    涉及到的机型

    • iPhoneX 11.4 iphone7 10.2 iphone6plus 11.2 11.4 iphone8 11.4 iPhone6 11.4 都没出现问题

    马上发布阶段换成公网的域名的 开始最后阶段测试时
    首先 iPhoneX 11.4 出问题了

    # 以下方法基本不执行 (95%的情况下<不执行> 5%的情况下<执行>)
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    }
    
    • 立马测别的测试机 都OK
    • 大概连测了半个多小时(期间我一直在百度X为啥不行)
    • 半小时连续测试后 测试的跑来告我iPhone6 11.4也不行了
    • 我继续百度 11.4 为啥不执行
    • 统统无果 (最多有点相关信息的是WK的代理没设置 或者别的操作把代理覆盖掉了 然而我确定 我的并不是这个原因)

    最终我检查了一遍代码之后 把怀疑的目光聚焦在了这个代理回调上

    • 代码如下
    // 在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
        decisionHandler(WKNavigationActionPolicyAllow);
        NSURL * URL = navigationAction.request.URL;
        if ([URL.absoluteString hasPrefix:@"iosAnswer1"]) {
             xxxxx
       }
    
        if ([URL.absoluteString hasPrefix:@"iosAnswer2"]) {
             yyyy
       }
    
        if ([URL.absoluteString hasPrefix:@"iosAnswer3"]) {
             zzzz
       }
       }
    
    • 改成这样后 问题解决
    // 在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
        
        NSURL * URL = navigationAction.request.URL;
        if ([URL.absoluteString hasPrefix:@"iosAnswer1"]) {
             xxxxx
            decisionHandler(WKNavigationActionPolicyCancel);
       } else
    
        if ([URL.absoluteString hasPrefix:@"iosAnswer2"]) {
             yyyy
            decisionHandler(WKNavigationActionPolicyCancel);
       } else
    
        if ([URL.absoluteString hasPrefix:@"iosAnswer3"]) {
             zzzz
             decisionHandler(WKNavigationActionPolicyCancel);
       } else
       {
            decisionHandler(WKNavigationActionPolicyAllow);
       }
    

    另外一件不严谨的事儿

    • 公司的企业级账号 在配置证书的时候 发现发布证书在有效期内 所以就没创建新的发布证书
    • 然后导出P12给其他同事用时 发现P12文件不能被导出 是置为灰色的
    • 同时🔑串里安装的证书也不是能被展开的
    • 后来一想 原来是已存在的证书 包含的不是我本机的CSR文件 天了噜😝

    鉴于能力有限 水平一般 理解有误之处 深望不吝指出 阿门

    相关文章

      网友评论

          本文标题:严谨写代码态度的养成

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