gpt4 book ai didi

javascript - WKWebView 在后台不运行 JavaScript

转载 作者:可可西里 更新时间:2023-11-01 02:47:53 26 4
gpt4 key购买 nike

我注意到有时当 webview 移动到后台时(在顶部有另一个 View Controller ),它会停止 JavaScript 函数的执行,并且只有在返回到前台时才执行它们。
here一个有类似问题的线程,但大多数解决方案都是某种 hack,比如将 webview 添加到关键窗口,或者循环虚拟调用以评估 JavaScript,这样 webview 就不会进入空闲模式并停止 JavaScript。
顺便说一下,这些解决方案很管用,但我一点都不喜欢。
我想知道这个问题是否有更好的解决方案,任何配置 webView 以防止进入空闲模式的方法,或者更优雅的方法来确定 JavaScript 的优先级。
谢谢。

最佳答案

不幸的是,WKWebView 必须在 View 层次结构中才能使用它。您必须将其添加为屏幕 View Controller 的 subview 。

您可以将此添加到屏幕外,使其不可见。隐藏属性也可能起作用。无论哪种方式,您都必须使用它调用 addSubview 才能使其正常工作。

There are some other在这里问答which verify this .

所以,我稍微研究了一下发现了这个

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,您必须通过 WKPreferences 启用它。 .您需要将首选项对象的 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

你也可以查看这个 post查看不同的方法。

关于javascript - WKWebView 在后台不运行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53482566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com