如何确定WKWebView崩溃的原因

Mas*_*iti 12 ios wkwebview

我在为iOS 8+构建的Swift应用程序中使用WKWebView.我在我的应用程序中的各种视图中使用WKWebView实例,例如在我的选项卡视图控制器的每个选项卡中,该界面基于WKWebView.

我和我的测试人员已经注意到这些视图有时会完全消失,在研究了这个问题之后,似乎WKWebView可能会崩溃,而空白视图就是结果.幸运的是,由于WKWebView的运行方式,它并没有降低应用程序,但我也不清楚如何捕获/记录导致崩溃的原因的信息(如果这实际上是发生了什么).

如何确定WKWebView是否/为何崩溃?

我目前解决的问题是我使用KVO(实际上是Facebook的KVOController)来监视WKWebView的"URL"属性,如果它从非零到nil,我认为发生了崩溃,我重新加载webview:

kvoController?.observe(webView, keyPath: "URL", options: NSKeyValueObservingOptions.New|NSKeyValueObservingOptions.Old) { (areaViewController, webView, change) -> Void in
    if change[NSKeyValueChangeNewKey] is NSNull && !(change[NSKeyValueChangeOldKey] is NSNull) {
        areaViewController.setup() // reload our webview
    }
}
Run Code Online (Sandbox Code Playgroud)

但显然找出崩溃的根本原因会很好.

Ste*_*ntz 7

这是我们在Firefox for iOS中遇到的非常讨厌的WKWebView问题.

请参阅以下错误报告https://bugs.webkit.org/show_bug.cgi?id=148685

我没有很好的解决方案,但我有两个提示:

首先,当我们通过webView.URL转向的KVO发现时,我们也在进行重新加载nil.然而事实证明,它打开nil了许多事件.例如,当重定向发生时,也可能在提交表单时.所以这不太理想.

其次,在iOS9中有一个新的API可以检测WebKit内容进程何时死亡.我们还没有尝试过这个,但我认为这将是重新加载webView的更好的触发器.

我认为还没有文档,但您可以在头文件中看到:

- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0);
Run Code Online (Sandbox Code Playgroud)