严谨写代码态度的养成

2018-07-06  本文已影响33人  LD_左岸

前提应用场景非常简单

 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"];
}
// 在发送请求之前,决定是否跳转
- (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 出问题了

# 以下方法基本不执行 (95%的情况下<不执行> 5%的情况下<执行>)
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
}

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

// 在发送请求之前,决定是否跳转
- (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);
   }

另外一件不严谨的事儿

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

上一篇 下一篇

猜你喜欢

热点阅读