国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS11 WKWebView 無法加載內容的解決方法

2020-07-26 02:37:08
字體:
來源:轉載
供稿:網友

問題描述: iOS9和iOS10用WKWebView加載URL都沒有問題,iOS11卻是一片空白

可能是用了 NSMutableURLRequest ,iOS11貌似不支持 NSMutableURLRequest ,無論是用 UIWebView 還是 WKWebView ,都不支持 NSMutableURLRequest

解決方法參考

if #available(iOS 11, *) {   let request = NSURLRequest.init(url: URL.init(string: urlStr)!)   self.wkWebView.load(request as URLRequest)  }else{   let request = NSMutableURLRequest.init(url: URL.init(string: urlStr)!, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)   request.httpMethod = "GET"   request.httpBody = ("token=" + tokenValue()).data(using: String.Encoding.utf8)   self.wkWebView.load(request as URLRequest)  }

iOS11 Xcode9 WKWebView崩潰問題解決方案

正式版的iOS11&Xcode 9已經發布,乘著版本空檔期,趕緊花點時間完成適配工作。

在用iPhone X 的模擬器進入Hybrid項目時,發現一進去就崩潰,崩潰信息少的可憐:

libc++abi.dylib: terminating with uncaught exception of type NSException

靠這玩意兒肯定是定位不出bug的,不過全局斷點還是給出了一點信息:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSString *requestString = navigationAction.request.URL.absoluteString; //對外鏈、撥號和跳轉appstore做特殊處理 UIApplication *app = [UIApplication sharedApplication]; NSURL *url = [navigationAction.request URL]; //電話 //此處省略若干業務代碼 if ([url.absoluteString containsString:@"itunes.apple.com"]) {  if ([app canOpenURL:url])  {   [app openURL:url];   decisionHandler(WKNavigationActionPolicyCancel);  } } if ([requestString hasPrefix:@"easy-js:"]) {  [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];  decisionHandler(WKNavigationActionPolicyCancel); } if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {  [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } decisionHandler(WKNavigationActionPolicyAllow);//崩在這里}

仍然不知道為啥子崩在這兒?之前一直是沒問題的啊??

小Tips:

為了獲取一些堆棧信息以便于快準狠的定位問題,可以在main函數里:

int main(int argc, char * argv[]) { @try {  @autoreleasepool  {   return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));  } } @catch (NSException* exception) {  NSDebugLog(@"Exception=%@/nStack Trace:%@", exception, [exception callStackSymbols]); }}

最終得到一條關鍵報錯:

Completion handler passed to -[WKPrivateNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once

意思就是WKWebView的這個代理方法被多次調用了。

if ([requestString hasPrefix:@"easy-js:"]) {  [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];  decisionHandler(WKNavigationActionPolicyCancel); } if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {  [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } decisionHandler(WKNavigationActionPolicyAllow);//崩在這里

簡單分析一下被多次調用的原因:

1、系統判斷這個方法被多次執行,主要是看decisionHandler()是否被多次執行;

2、由于if判斷里會執行decisionHandler(),最后一行代碼也會執行decisionHandler(),并且self.realDelegate中也會執行decisionHandler(),這就導致了decisionHandler()這個handler可能會被多次執行。

那解決問題的方向就是修改代碼保證WKWebView單次LoadRequest只調一次此代理方法~

修改如下:

 if ([requestString hasPrefix:@"easy-js:"]) {  [self handleRequestString:requestString webView:(EasyJSWebView *)webView.superview];  decisionHandler(WKNavigationActionPolicyCancel); } else if ([self.realDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {  [self.realDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } else {  decisionHandler(WKNavigationActionPolicyAllow); }

即保證了單次LoadRequest只執行一次decisionHandler()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑川县| 沐川县| 屏东县| 禄劝| 黑龙江省| 青岛市| 无为县| 始兴县| 旬邑县| 日照市| 正阳县| 武山县| 孟连| 塘沽区| 德清县| 开远市| 东台市| 福建省| 常熟市| 漯河市| 乐至县| 射洪县| 黑水县| 辽源市| 英吉沙县| 万宁市| 姜堰市| 山阳县| 上饶县| 会理县| 司法| 佳木斯市| 修武县| 郓城县| 青岛市| 普兰县| 梁平县| 巩留县| 蒙阴县| 吉首市| 尼勒克县|