WKWebView进程终止

时间:2017-11-24 07:43:40

标签: macos wkwebview

我正在尝试使用网络视图构建一个简单的MacOS应用。我使用WKWebView并且没有明显的原因,在初始化Web视图后立即调用webViewWebContentProcessDidTerminate()方法,即使尝试加载任何内容也没有Web视图。经过几个小时的在线查看文档和问题,我无法弄清楚为什么会发生这种情况以及如何防止这种情况发生。网上建议的唯一事情就是在发生这种情况时重新加载网页视图,这会导致方法稍后再次被调用,等等。我现在使用以下源代码编写一个完全空的MacOS应用程序:

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    var webView: WKWebView!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
        webView.navigationDelegate = self
    }
}

extension AppDelegate: WKNavigationDelegate {
    func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
        print("web view process did terminate")
        webView.reload()
    }
}

如果Web视图位于视图层次结构中,并且具有非零帧,并且通常是否可见,则无关紧要。我只是为了尝试一切而启用了任意加载。

我真的很感激这方面的一些帮助。我正在编译10.13 SDK并在MacOS 10.12上运行。

感谢。

2 个答案:

答案 0 :(得分:4)

我设法搞清楚了。对于其他正在努力解决此问题的人,您需要将com.apple.security.network.client权利添加到您的应用中。

答案 1 :(得分:0)

如果wkwebview即将终止,则可以在reload方法内添加webViewWebContentProcessDidTerminate方法,基本上可以重新加载Webview。

检查以下代码, 文件名:CRAWKWebView.m

- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView
{
  RCTLogWarn(@"Webview Process Terminated");
  if (webView) {
    [webView reload];
  }
}

reload实例由wkwebview提供。