react native 0.44.3 ios webview 102 error

102 error

目的

app項目首頁banner功能,點擊進入活動頁面。由于web微站早已上線,為了不重復開發(fā)
(其實就是偷懶,為啥要重復開發(fā)一個一模一樣的頁面,而且用rn構建活動頁,那么多不同的模板,搞死人咯??)。

思路

  1. 最終采取采取app內(nèi)嵌微站webview頁面。
  2. 點擊banner跳轉至微站web頁面。
  3. 活動頁點擊商品跳轉至原生商品詳情頁(其實后來考慮抽象的WebViewFilter.js業(yè)務抽象類,原則是有原生就跳原生)。

遇到的坑

點擊banner進入攔截器了并且也跳轉了對應的原生頁面,可是從詳情頁返回后,盡然。。。??,什么鬼??


102 error

分析

分析ios報錯

  1. 參考 Domain=WebKitErrorDomain Code=102 內(nèi)容,說是因為url不完整,在網(wǎng)站前拼接一個@”http://”可以解決。排查了下,不是上述問題,url是完整的。

  2. 看ios日志

  void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode

查了下說好像是因為多次發(fā)送請求導致的,就是多次同時創(chuàng)建 iframe被ios攔截導致卡住了。我看了下頁面沒有iframe,并且沒有多次請求的情況,我就是點了一個商品的連接啊啊啊,ORZ。。。。

分析web頁面代碼

  1. 查看具體活動頁面瀏覽器中的html代碼,其跳轉的url為“/mobile/product/content/201706/147149.html”
      <li>
        <a href="/mobile/product/content/201706/147149.html" class="ui-link">
            <div>
                <img src="http://image.com/n1/jfs/t2479/126/1824111579/264665/d911e030/56de95a0Nbe0fcefa.jpg" alt="">
            </div>    
            <div class="txt-con">
                <p class="txt-con-name">水星家紡出品 百麗絲家紡 全棉斜紋印花四件套 浮崗翠 雙人1.5米床</p>
                <div class="yPrice">
                    <span class="pText">搶購價:</span>
                    <span class="pColor">暫無報價</span>
                </div>
            </div>
        </a>
    </li>
  1. 可是點擊后跳轉頁面卻是,http://www.website.com/mobile/product/content.jhtml?brandId=3524&productCategoryId=1626&productId=147149,什么鬼?

  2. 去看服務端代碼后發(fā)現(xiàn)服務端有攔截器,用于判斷客戶端請求是移動端,還是pc端,最終redirect到對應請求頁面。所以是不是因為重定向?qū)е碌膯栴}呢?
    別的頁面沒重定向頁面都正常,只有詳情頁有問題,所以判斷是因為重定向?qū)е铝?02.

解決方法

根據(jù)下面參考的連接,我采用了如下方法解決,找到RN webview的源碼路徑為:項目名稱/node_modules/react-native/React/Views/RCTWebView.m

    - (void)webView:(__unused UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
      // Ignore NSURLErrorDomain error -999.
      if (error.code == NSURLErrorCancelled) return;
      
      // Ignore "Fame Load Interrupted" errors. Seen after app store links.
      if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return;

      if (_onLoadingError) {
        if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) {
          // NSURLErrorCancelled is reported when a page has a redirect OR if you load
          // a new URL in the WebView before the previous one came back. We can just
          // ignore these since they aren't real errors.
          // http://stackoverflow.com/questions/1024748/how-do-i-fix-nsurlerrordomain-error-999-in-iphone-3-0-os
          return;
        }

        NSMutableDictionary<NSString *, id> *event = [self baseEvent];
        [event addEntriesFromDictionary:@{
          @"domain": error.domain,
          @"code": @(error.code),
          @"description": error.localizedDescription,
        }];
        _onLoadingError(event);
      }
    }

參考

webview error code:102 Domain=WebKitErrorDomain Code=102

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容