美文网首页
WKWebview 白屏

WKWebview 白屏

作者: Phant | 来源:发表于2022-08-24 10:04 被阅读0次

    WKWebview页面突然白屏问题

    页面突然白屏可能是由于加载资源过大,内存不足,导致webview的进程被程序终止了。
    针对这个问题,在项目中,完成了以下修改:

    1.清理WKWebView缓存

    WKWebView清除缓存只能iOS9使用,低于iOS9运行会崩溃。所以,为了适配iOS7和iOS8,需要做版本判断

    if ([[[UIDevice currentDevice]systemVersion]intValue ] >= 9.0) {
            NSArray * types =@[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache]; // 9.0之后才有的
            NSSet *websiteDataTypes = [NSSet setWithArray:types];
            NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
            [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
            }];
        }else{
            NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) objectAtIndex:0];
            NSString *cookiesFolderPath = [libraryPath stringByAppendingString:@"/Cookies"];
            NSLog(@"%@", cookiesFolderPath);
            NSError *errors;
            [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors];
        }
    

    WKWebView是iOS8之后出现的,相较于UIWebView,WKWebView占用的内存更小,还有一些其他的优化。但是如果我们不去主动清理webView产生的缓存,两者都会存在缓存这个问题。比如说一个网页改了一些内容,如果不清理缓存,可能很长一段时间我们都没办法看到新的内容,唯一的办法是卸载重装。
    在加载webView的ViewControllerviewDidLoad中实现这些代码,可以保证每次加载的webView的内容都是最新的。

    2.借助 WKNavigtionDelegate

    在 UIWebView 上当内存占用太大的时候,App Process 会 crash;而在 WKWebView 上当总体的内存占用比较大的时候,WebContent Process 会 crash,从而出现白屏现象。
    当 WKWebView 总体内存占用过大,页面即将白屏的时候,系统会调用上面的回调函数,我们在该函数里执行[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。在一些高内存消耗的页面可能会频繁刷新当前页面,H5则也要做相应的适配操作。

    - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0)); 
    

    但并不是所有白屏都会掉用上面方法,可以在 viewWillAppear 的时候检测 webView.title 是否为空来 reload 页面。

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        if (self.webView.title == nil) {
            [self.webView reload];
        }
    }
    

    参考文章:
    https://blog.csdn.net/ljc_563812704/article/details/84071186
    https://www.jianshu.com/p/e2959be73128

    相关文章

      网友评论

          本文标题:WKWebview 白屏

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