WKWebView没有';不要在后台运行JavaScript
我注意到,有时当webview移动到后台(顶部有另一个视图控制器)时,它会停止JavaScript函数的执行,并仅在返回前台时执行它们。WKWebView没有';不要在后台运行JavaScript,javascript,ios,xcode,wkwebview,Javascript,Ios,Xcode,Wkwebview,我注意到,有时当webview移动到后台(顶部有另一个视图控制器)时,它会停止JavaScript函数的执行,并仅在返回前台时执行它们。 一个有类似问题的线程,但大多数解决方案都是某种黑客行为,比如将webview添加到关键窗口,或者循环虚拟调用evaluateJavaScript,这样webview就不会进入空闲模式并停止JavaScript。 顺便说一句,这些解决方案很有效,但我一点也不喜欢它们。 我想知道是否有更好的解决方案来解决这个问题,是否有配置webView以防止进入空闲模式的方法,
一个有类似问题的线程,但大多数解决方案都是某种黑客行为,比如将webview添加到关键窗口,或者循环虚拟调用evaluateJavaScript,这样webview就不会进入空闲模式并停止JavaScript。
顺便说一句,这些解决方案很有效,但我一点也不喜欢它们。
我想知道是否有更好的解决方案来解决这个问题,是否有配置webView以防止进入空闲模式的方法,或者有更优雅的方式对JavaScript进行优先级排序。
谢谢。不幸的是,WKWebView必须位于视图层次结构中才能使用它。您必须已将其添加为屏幕视图控制器的子视图 您可以在屏幕外添加此内容,使其不可见。隐藏属性也可能起作用。无论哪种方式,您都必须使用它调用addSubview以使其工作 这里有问题和答案 所以,我稍微研究了一下,发现了这个
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。要运行Javascript,必须通过启用它。您需要将preferences对象的javascriptEnabled
字段设置为true
具体来说,初始化WKWebView的代码应该如下所示
let contentController = WKUserContentController()
contentController.add(self, name: "handler")
let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()
configuration.preferences.javaScriptEnabled = true
webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview
您也可以查看此链接以查看不同的方法。谢谢您的链接!你能用代码来扩展这个答案吗?这样我就可以给出一个确切的例子来说明如何解决这个问题了@你能解释一下你到底需要实现什么吗?一些最低限度的代码也会受到欢迎。(还有对这个问题的评论,所以我们可以在这里提到你)我正在寻找允许WKWebView在被另一个视图覆盖时运行JavaScript的代码。我尝试了这一点,但我不知道把这段代码放在哪里。这也是一个新的空wkwebview,还是应该添加到我在Ui构建中创建的现有视图中?您可以将该方法添加到代码中。但是我不能在没有看到任何代码的情况下为您提供更多帮助。但是你可以查看这个链接,也许它会对你有所帮助。