严谨写代码态度的养成

前提应用场景非常简单

  • 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文件 天了噜😝

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容