美文网首页
关于WKWebview白屏问题的一丝解决方案

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

作者: 程序猿界的cai渣渣 | 来源:发表于2023-03-02 09:05 被阅读0次

    关于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];
    }
    
    其他问题查看其他大神部分内容:

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

    相关文章

      网友评论

          本文标题:关于WKWebview白屏问题的一丝解决方案

          本文链接:https://www.haomeiwen.com/subject/opfdldtx.html