Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WKWebView没有';不要在后台运行JavaScript_Javascript_Ios_Xcode_Wkwebview - Fatal编程技术网

WKWebView没有';不要在后台运行JavaScript

WKWebView没有';不要在后台运行JavaScript,javascript,ios,xcode,wkwebview,Javascript,Ios,Xcode,Wkwebview,我注意到,有时当webview移动到后台(顶部有另一个视图控制器)时,它会停止JavaScript函数的执行,并仅在返回前台时执行它们。 一个有类似问题的线程,但大多数解决方案都是某种黑客行为,比如将webview添加到关键窗口,或者循环虚拟调用evaluateJavaScript,这样webview就不会进入空闲模式并停止JavaScript。 顺便说一句,这些解决方案很有效,但我一点也不喜欢它们。 我想知道是否有更好的解决方案来解决这个问题,是否有配置webView以防止进入空闲模式的方法,

我注意到,有时当webview移动到后台(顶部有另一个视图控制器)时,它会停止JavaScript函数的执行,并仅在返回前台时执行它们。
一个有类似问题的线程,但大多数解决方案都是某种黑客行为,比如将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构建中创建的现有视图中?您可以将该方法添加到代码中。但是我不能在没有看到任何代码的情况下为您提供更多帮助。但是你可以查看这个链接,也许它会对你有所帮助。