2017-06-20 108 views
3

我有一個WKWebView,使用WKWebViewConfiguration加載本地一組網頁,將@"allowFileAccessFromFileURLs"的配置設置爲true。WKWebView以某些網頁配置掛起本地網頁加載。

請求設置了這樣的事情:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"testPage" withExtension:@"html" subdirectory:@"html/pages"]; 
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0f]; 

然後請求使用以下WKWebview方法發送:

- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request; 

我的問題是在設備有一個當前連接,但沒有網絡流量。 webview作爲屏幕上的一個元素將被添加到屏幕上,並且會提出請求,但webview會在顯示本地內容之前顯示約50秒的白色屏幕。

無論網絡狀態如何,webview中的所有內容都會在沒有鏈接調節器設置時在本地加載。

例如,如果設備連接到無線網絡,但網絡鏈路調節器設置爲100%丟失。 webview被創建並且發送請求來加載觸發負載掛起的本地內容。

我有一個想法,它可能是WKWebView試圖在需要網絡事務的背景做某種驗證,但我做了一些網絡與儀器分析,還有一些時間軸記錄在Safari瀏覽器中,我無法看到任何會導致它掛起的東西。

我能想到它在50秒左右加載本地內容的唯一原因是它的某種WKWebView超時加載網絡連接。

任何幫助將不勝感激,謝謝。

+1

我創建了一個基於您提供的代碼的示例項目,將網絡鏈接condi到100%的損失(證實模擬器中的Safari沒有互聯網連接),並且無法重現此問題。你能否發佈能夠重現問題的代碼(儘可能簡單,忽略任何不相關的細節)? – paulvs

+0

嘿謝謝@paulvs的努力!我現在把一個更好的例子放在一起。 –

+1

@paulvs所以我把所有的東西都剝離到了準系統項目中,並且問題不再發生。我現在認爲這個問題與實際的網頁內容本身有關。如果我研究出了什麼問題,我會回到這裏。 –

回答

0

好吧,對於那些絆倒我的人,我發現我做錯了什麼。

這個問題實際上並不是WKWebview或Web內容本身,而是我如何處理Web視圖加載的完成。

的方法

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{ 

我是通過評估一些JS像這樣監聽事件的完成:

-(void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation 
{ 

    [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) 
    { 
     if (result != nil) { 
     [self doCertainNetworkEvent]; //here another method is called with a networking function inside of it. 
    } 
     if(error) 
     { 
      NSLog(@"evaluateJavaScript error : %@", error.localizedDescription); 
     } 
    }]; 

} 

課程結束塊不可能完成,直到內的網絡功能didFinishNavigation方法調用已完成(這是因爲沒有流量而無法執行)。