iOS11 WKWebView 无法加载内容的解决方法 WKWebView 是 iOS 中的一个网页视图控件,自 iOS 8 开始引入,取代了 UIWebView。WKWebView 提供了更好的性能和安全性,但是在 iOS 11 中,却出现了加载内容失败的问题。本文将介绍 iOS 11 WKWebView 无法加载内容的解决方法。 WKWebView 无法加载内容的原因 WKWebView 无法加载内容的原因主要是因为 iOS 11 不支持 NSMutableURLRequest。这意味着,在 iOS 11 中,使用 NSMutableURLRequest 来加载网页将会失败。 解决方法 解决方法是使用 NSURLRequest 来代替 NSMutableURLRequest。下面是一个示例代码: ```swift 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) } ``` 在上面的代码中,我们首先检查当前的 iOS 版本是否大于或等于 11。如果是,则使用 NSURLRequest 来加载网页;否则,使用 NSMutableURLRequest。 WKWebView 崩溃问题解决方案 在 iOS 11 和 Xcode 9 中,WKWebView 也存在崩溃问题。崩溃的原因可能是由于 WKWebView 的 delegate 方法没有正确地实现。解决方法是正确地实现 WKWebView 的 delegate 方法,如下所示: ```swift - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSString *requestString = navigationAction.request.URL.absoluteString; // 对外链、拨号和跳转 app store 做特殊处理 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); } ``` 在上面的代码中,我们正确地实现了 WKWebView 的 decidePolicyForNavigationAction 方法,解决了 WKWebView 崩溃问题。 WKWebView 无法加载内容的问题在 iOS 11 中可以通过使用 NSURLRequest 来解决,而 WKWebView 崩溃问题可以通过正确地实现 delegate 方法来解决。
- 粉丝: 5
- 资源: 886
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助