关于WKWebview白屏问题的一丝解决方案

2023-03-02  本文已影响0人  程序猿界的cai渣渣

关于WKWebview加载html之后,代理方法返回加载成功,但却是白屏状态,找到几个方法,如下。

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. 白屏问题描述及方法

当前页面是白屏状态,但是在Safari-开发中,点击“刷新”就会出现正常的页面,由此判定是缓存问题,采用了网上的方法: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白屏或者返回内容为空方法
方法1:
[webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
    NSString *resultString = (NSString *)result;
    DebugLog(@"加载内容 document.body.innerHTML: %@", resultString);
    if (resultString.length == 0) {
        // 可以做其他操作:刷新或者退出等
        [webView reload];
    }
}];
方法2:
// 避免h5页白屏,代理方法
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
    [_webView reload];
}
其他问题查看其他大神部分内容:

白屏可查看
高度自适应可查看

上一篇下一篇

猜你喜欢

热点阅读