今天使用WKWebView遇到了一些問(wèn)題,由于自己也是第一次使用這個(gè)控件,所以用來(lái)做個(gè)記錄
加載URL:https://www.so.com顯示正常,而加載https://m.500.com/info/article/detail-231721.shtml出現(xiàn)白屏
查看WKWebView的代理時(shí),發(fā)現(xiàn)WKNavigationDelegate代理中有兩個(gè)返回錯(cuò)誤信息的代理,所以加入到代碼中調(diào)試
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{
????NSLog(@"加載失敗%@", error.userInfo);
}
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{
????NSLog(@"加載失敗%@", error.userInfo);
}
果真在didFailProvisionalNavigation返回了錯(cuò)誤信息
NSErrorFailingURLKey = "https://m.500.com/info/article/detail-231721.shtml";
NSErrorFailingURLStringKey = "https://m.500.com/info/article/detail-231721.shtml";
NSLocalizedDescription = "An SSL error has occurred and a secure connection to the server cannot be made.";
NSLocalizedRecoverySuggestion = "Would you like to connect to the server anyway?";
NSUnderlyingError = "Error Domain=kCFErrorDomainCFNetwork Code=-1200 \"(null)\" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9858, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9858}";
"_NSURLErrorFailingURLSessionTaskErrorKey" = "LocalDataTask <2EF41F2F-E2B7-4179-A668-AA19CA4CE8C5>.<1>";
"_WKRecoveryAttempterErrorKey" = "<WKReloadFrameErrorRecoveryAttempter: 0x2805549a0>";
"_kCFStreamErrorCodeKey" = "-9858";
"_kCFStreamErrorDomainKey" = 3;
networkTaskDescription = "LocalDataTask <2EF41F2F-E2B7-4179-A668-AA19CA4CE8C5>.<1>";
WKWebview 拋出了SSL錯(cuò)誤,無(wú)法與服務(wù)器建立安全鏈接
解決方法如下:
1.在info.plist中加入如下代碼
<key>NSAppTransportSecurity</key>
<dict>?
? ???????<key>NSAllowsArbitraryLoads</key>
? ???????<true/>
?</dict>?
2.實(shí)現(xiàn)代理方法
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
? ? if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
? ? ? ? if([challengepreviousFailureCount] ==0) {
? ? ? ? ? ? NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
? ? ? ? ? ? completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
? ? ? ? }else{
? ? ? ? ? ? completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
? ? ? ? }
? ? }else{
? ? ? ? completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
? ? }
}
重新運(yùn)行后頁(yè)面可以正確渲染了