内存警告后WKWebView变为空白

时间:2014-12-19 11:37:11

标签: ios wkwebview

我开发的iOS应用程序将在wkWebView中显示360度全景内容。页面确实加载,但是当它收到内存警告时,它会在iPad 2上显示一个空白视图。

相关代码:

NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://360yerevan.com/mobilembed/91001/"] ];


NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";

WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
wkWebConfig.userContentController = wkUController;
wkWebConfig.processPool = [[WKProcessPool alloc] init];

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig];

[self.view addSubview:webView];
[webView loadRequest:req];

这适用于iPhone 5 / 5S。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

其中一个主要原因是WebContent进程崩溃。

在iOS 9及更高版本中,您可以使用WKNavigationDelegate方法webViewWebContentProcessDidTerminate来捕获此案例。由您来决定如何响应崩溃,但如果重新加载页面就足够了,那么[webView reload]将完成这一操作,如下所示。正如@ray在评论中提到的那样,您不会从此委托调用中获得有关崩溃的原因的任何有用信息。

- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
    // Reload current page, since we have crashed the WebContent process
    // (most likely due to memory pressure)
    [webView reload];
}

在iOS8及以下版本中,您可以检查myWKWebViewInstance.title是否为零。