WKWebView虽好,但白屏问题也很苦恼,下面分享一下自己解决问题的过程。
公司项目使用Cordova框架,做原生项目嵌入H5,业务复杂了以后,H5资源也越来越大,占用内存越来越多,加载也越来越慢,直到做热更新时候,遇到了白屏问题。
第一步:有说白屏时候回调webViewWebContentProcessDidTerminate方法,那就加上吧:
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
[webView reload];
}
然而没用,根本不回调。
第二步:-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { }方法中加载外部JS导致白屏,那就去掉,然而还是没用。
第三步:由于做热更新,加载了本地H5资源,注意本地H5资源必须放到沙盒Documents目录下才能被WKWebView访问,放在tmp或Library下根本不行。
NSURL *url = [NSURL fileURLWithPath:urlString];
[webView loadRequest:[NSURLRequest requestWithURL:url]];
这样使用,还是不行。改成:
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[webView loadRequest:request];
并且WKWebView初始化时候,加上允许访问FileURL:
[configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];
发现模拟器上不白屏了,但高兴太早了,真机测试,依然白屏。
第四步:参考字节分享的白屏重载方法
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
[self judgeLoadingStatus:webView withBlock:^(we