- 問(wèn)題情境
嵌入金融相關(guān)的H5時(shí)味赃,可能會(huì)有這樣的操作:從接口請(qǐng)求得到一個(gè)JSON字符串,取出其中html字符串蹂析,由UIWebView的loadHTMLString方法渲染該html字符串。當(dāng)一個(gè)按鈕點(diǎn)擊跳轉(zhuǎn)另一個(gè)網(wǎng)頁(yè)時(shí)倒脓,會(huì)走網(wǎng)頁(yè)加載錯(cuò)誤的代理方法罗心。這時(shí)候里伯,需要區(qū)分這種錯(cuò)誤。
- 問(wèn)題代碼
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
//把出錯(cuò)信息打出來(lái)
NSLog(@"webview didFailLoadWithError %@ , and err is %@",webView.debugDescription, error.debugDescription);
[Toast showBottomWithText:@"加載失敗,請(qǐng)稍后再試"];
}
- 問(wèn)題分析
慢網(wǎng)時(shí)渤闷,頁(yè)面內(nèi)通過(guò)按鈕等控件跳轉(zhuǎn)可能會(huì)出現(xiàn)報(bào)錯(cuò)(即使視覺(jué)上網(wǎng)頁(yè)跳轉(zhuǎn)并加載成功)疾瓮。這是由于當(dāng)一個(gè)按鈕點(diǎn)擊跳轉(zhuǎn)另一個(gè)網(wǎng)頁(yè)時(shí),會(huì)走網(wǎng)頁(yè)加載錯(cuò)誤的代理方法飒箭。而走代理方法的原因是因?yàn)樯弦粋€(gè)URL還沒(méi)完全加載完全狼电,就開(kāi)始下一個(gè)URL的請(qǐng)求,就會(huì)走該代理方法弦蹂。
- 斷點(diǎn)分析error
Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed.
- 查看NSURLErrorDomain的枚舉類(lèi)型
NS_ERROR_ENUM(NSURLErrorDomain)
{
NSURLErrorUnknown = -1,
NSURLErrorCancelled = -999,
NSURLErrorBadURL = -1000,
NSURLErrorTimedOut = -1001,
NSURLErrorUnsupportedURL = -1002,
NSURLErrorCannotFindHost = -1003,
NSURLErrorCannotConnectToHost = -1004,
NSURLErrorNetworkConnectionLost = -1005,
NSURLErrorDNSLookupFailed = -1006,
NSURLErrorHTTPTooManyRedirects = -1007,
NSURLErrorResourceUnavailable = -1008,
NSURLErrorNotConnectedToInternet = -1009,
NSURLErrorRedirectToNonExistentLocation = -1010,
NSURLErrorBadServerResponse = -1011,
NSURLErrorUserCancelledAuthentication = -1012,
NSURLErrorUserAuthenticationRequired = -1013,
NSURLErrorZeroByteResource = -1014,
NSURLErrorCannotDecodeRawData = -1015,
NSURLErrorCannotDecodeContentData = -1016,
NSURLErrorCannotParseResponse = -1017,
NSURLErrorAppTransportSecurityRequiresSecureConnection API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) = -1022,
NSURLErrorFileDoesNotExist = -1100,
NSURLErrorFileIsDirectory = -1101,
NSURLErrorNoPermissionsToReadFile = -1102,
NSURLErrorDataLengthExceedsMaximum API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) = -1103,
NSURLErrorFileOutsideSafeArea API_AVAILABLE(macos(10.12.4), ios(10.3), watchos(3.2), tvos(10.2)) = -1104,
// SSL errors
NSURLErrorSecureConnectionFailed = -1200,
NSURLErrorServerCertificateHasBadDate = -1201,
NSURLErrorServerCertificateUntrusted = -1202,
NSURLErrorServerCertificateHasUnknownRoot = -1203,
NSURLErrorServerCertificateNotYetValid = -1204,
NSURLErrorClientCertificateRejected = -1205,
NSURLErrorClientCertificateRequired = -1206,
NSURLErrorCannotLoadFromNetwork = -2000,
// Download and file I/O errors
NSURLErrorCannotCreateFile = -3000,
NSURLErrorCannotOpenFile = -3001,
NSURLErrorCannotCloseFile = -3002,
NSURLErrorCannotWriteToFile = -3003,
NSURLErrorCannotRemoveFile = -3004,
NSURLErrorCannotMoveFile = -3005,
NSURLErrorDownloadDecodingFailedMidStream = -3006,
NSURLErrorDownloadDecodingFailedToComplete =-3007,
NSURLErrorInternationalRoamingOff API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1018,
NSURLErrorCallIsActive API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1019,
NSURLErrorDataNotAllowed API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1020,
NSURLErrorRequestBodyStreamExhausted API_AVAILABLE(macos(10.7), ios(3.0), watchos(2.0), tvos(9.0)) = -1021,
NSURLErrorBackgroundSessionRequiresSharedContainer API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) = -995,
NSURLErrorBackgroundSessionInUseByAnotherProcess API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) = -996,
NSURLErrorBackgroundSessionWasDisconnected API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))= -997,
};
- 解決方案
取出error肩碟,專(zhuān)門(mén)忽略該類(lèi)型錯(cuò)誤
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
// 如果是被取消,什么也不干
if([error code] == NSURLErrorCancelled) {
return;
}
//把出錯(cuò)信息打出來(lái)
NSLog(@"webview didFailLoadWithError %@ , and err is %@",webView.debugDescription, error.debugDescription);
[Toast showBottomWithText:@"加載失敗,請(qǐng)稍后再試"];
}