国产探花免费观看_亚洲丰满少妇自慰呻吟_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()

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台东县| 乐昌市| 禹州市| 云龙县| 静安区| 延川县| 易门县| 饶阳县| 乌鲁木齐县| 昌都县| 信阳市| 武安市| 井研县| 宜君县| 昌江| 盐池县| 巴林右旗| 山阳县| 莒南县| 行唐县| 通道| 大竹县| 利辛县| 时尚| 垫江县| 林口县| 南岸区| 平陆县| 尼勒克县| 黄龙县| 阿克| 永康市| 枣庄市| 桂东县| 佛坪县| 桦甸市| 南投市| 卫辉市| 东城区| 新密市| 新竹市|