2015-09-13 23 views
0

我繼承了一個項目,該項目使用的UIWebView不會向用戶顯示,以便通過引用JS文件來加載HTML進行計算,並且已經工作了相當長的一段時間。iOS 8.4.1破解了UIWebView?

我已驗證JS文件以及HTML和代碼沒有更改。

從8月13日發佈iOS 8.4.1開始,這部分代碼的問題就開始出現在客戶身上。

- (void)loadCompleteHTML:(NSString*)completeHTML { 
    self.caculateWebView = [[UIWebView alloc] init]; 
    self.caculateWebView.delegate = self; 
    [self.caculateWebView loadHTMLString:completeHTML baseURL:nil]; 
} 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) { 
     //do something with the success 
     . 
     . 
     return NO; 

    } else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) { 
     //do something with the fail 
     . 
     . 
     return NO; 
    } 

    return YES; 

} 

它沒有返回一個「成功」,也不是「失敗」的是,僅有的兩個結論可以從這個HTML/JS或者是這兩種的。

回答

-1

通過記錄request.URL.absoluteString,我看到iOS 8.4.1 UIWebView突然調用about:blank作爲加載後的第一個URL。我的解決方案是要求UIWebView只在第一次重新加載。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    BOOL calledForReload = NO; 

    if ([[request.URL.scheme lowercaseString] isEqualToString:@"success"]) { 
     //do something with the success 
     . 
     . 
     return NO; 

    } else if ([[request.URL.scheme lowercaseString] isEqualToString:@"fail"]) { 
     //do something with the fail 
     . 
     . 
     return NO; 
    } else if (!calledForReload) { 
     //call for reload 
     calledForReload = YES; 
     [webView reload]; 
    } 

    return YES; 

} 

希望我解決這個問題將幫助別人同樣的目瞪口呆,因爲我是。