我在无头 WKWebView 中运行socket.io的应用程序中观察到了类似的行为。在我的情况下,网络套接字会一直断开连接并且不会重新连接。
似乎由于 WKWebView 在进程外运行 javascript,它将暂停任何被认为空闲的 javascript 以节省资源 (<-IMO)。空闲包括没有父母或应用程序/设备处于非活动状态。所以,是的,您似乎是正确的,因为在大多数情况下它需要一个父视图。我能够使用以下代码解决此问题:
WKWebViewConfiguration* webViewConfig = // set up config
// provide empty frame rect
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfig];
// add to keyWindow to ensure it is 'active'
[UIApplication.sharedApplication.keyWindow addSubview:webView];
这种方法至少可以确保 javascript 在应用程序处于活动状态时运行并且不会影响 UI。如果您需要稍后显示它,您可以在渲染后从 keyWindow 中删除 webView 并重置框架。而且,是的,我还观察到在模拟器中这不是问题(无论父级或应用程序状态如何,javascript 总是运行)
希望这可以帮助!