關于WKWebview加載html之后,代理方法返回加載成功催蝗,但卻是白屏狀態(tài)切威,找到幾個方法,如下丙号。
1. 清理緩存方法
NSMutableArray *types = [@[WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeOfflineWebApplicationCache, WKWebsiteDataTypeCookies, WKWebsiteDataTypeSessionStorage, WKWebsiteDataTypeLocalStorage, WKWebsiteDataTypeWebSQLDatabases, WKWebsiteDataTypeIndexedDBDatabases] mutableCopy];
if (@available(iOS 11.3, *)) {
[types addObject:WKWebsiteDataTypeFetchCache];
[types addObject:WKWebsiteDataTypeServiceWorkerRegistrations];
}
// 9.0之后才有的
NSSet *websiteDataTypes = [NSSet setWithArray:types];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
2. 白屏問題描述及方法
當前頁面是白屏狀態(tài)牢屋,但是在Safari-開發(fā)中,點擊“刷新”就會出現(xiàn)正常的頁面槽袄,由此判定是緩存問題烙无,采用了網(wǎng)上的方法:API私有刷新方法:_updateVisibleContentRects。此方法還可以用以 webview滑動下半部分空白問題遍尺。
方法1:
if ([self.webView respondsToSelector:@selector(_updateVisibleContentRects)]) {
((void(*)(id,SEL,BOOL))objc_msgSend)(self.webView, @selector(_updateVisibleContentRects), NO);
}
方法2:
SEL sel = NSSelectorFromString(@"_updateVisibleContentRects");
if ([self.webView respondsToSelector:sel]) {
((void(*)(id,SEL,BOOL))objc_msgSend)(self.webView, sel, NO);
}
3. 清空URL的緩存操作
[[NSURLCache sharedURLCache] removeAllCachedResponses];
4. 檢測WKWebview白屏或者返回內(nèi)容為空方法
方法1:
[webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSString *resultString = (NSString *)result;
DebugLog(@"加載內(nèi)容 document.body.innerHTML: %@", resultString);
if (resultString.length == 0) {
// 可以做其他操作:刷新或者退出等
[webView reload];
}
}];
方法2:
// 避免h5頁白屏截酷,代理方法
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
[_webView reload];
}