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

首頁 > 系統(tǒng) > iOS > 正文

iOS11 WKWebView問題匯總

2020-07-26 02:37:08
字體:
供稿:網(wǎng)友

問題一描述:

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)  }

問題二描述:在用iPhone X 的模擬器進(jìn)入Hybrid項(xiàng)目時(shí),發(fā)現(xiàn)一進(jìn)去就崩潰,崩潰信息少的可憐:

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

靠這玩意兒肯定是定位不出bug的,不過全局?jǐn)帱c(diǎn)還是給出了一點(diǎn)信息:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSString *requestString = navigationAction.request.URL.absoluteString; //對(duì)外鏈、撥號(hào)和跳轉(zhuǎn)appstore做特殊處理 UIApplication *app = [UIApplication sharedApplication]; NSURL *url = [navigationAction.request URL]; //電話 //此處省略若干業(yè)務(wù)代碼 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:
為了獲取一些堆棧信息以便于快準(zhǔn)狠的定位問題,可以在main函數(shù)里:

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]); }}

最終得到一條關(guān)鍵報(bào)錯(cuò):

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

意思就是WKWebView的這個(gè)代理方法被多次調(diào)用了。

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);//崩在這里

簡單分析一下被多次調(diào)用的原因:

1、系統(tǒng)判斷這個(gè)方法被多次執(zhí)行,主要是看decisionHandler()是否被多次執(zhí)行;
2、由于if判斷里會(huì)執(zhí)行decisionHandler(),最后一行代碼也會(huì)執(zhí)行decisionHandler(),并且self.realDelegate中也會(huì)執(zhí)行decisionHandler(),這就導(dǎo)致了decisionHandler()這個(gè)handler可能會(huì)被多次執(zhí)行。
那解決問題的方向就是修改代碼保證WKWebView單次LoadRequest只調(diào)一次此代理方法~

修改如下:

 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只執(zhí)行一次decisionHandler()

問題三描述:iOS11 WKWebview獲取高度不準(zhǔn)確

遇見這個(gè)問題的時(shí)候,我發(fā)現(xiàn)偏離了大概64像素,由此聯(lián)想到了tableView和collectionView。
故解決辦法如下:

if (@available(iOS 11.0, *)) {  _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;  _webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);  _webView.scrollView.scrollIndicatorInsets = _webView.scrollView.contentInset; }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平和县| 东阳市| 永寿县| 定西市| 满洲里市| 启东市| 界首市| 海安县| 陆河县| 运城市| 彭山县| 突泉县| 无极县| 团风县| 天柱县| 巨鹿县| 左云县| 万盛区| 页游| 河南省| 卓尼县| 连南| 红桥区| 台江县| 望城县| 桦川县| 永修县| 海阳市| 阜城县| 汉川市| 阿坝| 龙山县| 类乌齐县| 淄博市| 志丹县| 阿拉善右旗| 漾濞| 日喀则市| 盐源县| 肇州县| 本溪|