我在为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)
但显然找出崩溃的根本原因会很好.
这是我们在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)
| 归档时间: |
|
| 查看次数: |
6168 次 |
| 最近记录: |