Ita*_*mza 16 javascript xcode ios wkwebview
我注意到,有时将webview移到后台(顶部有另一个视图控制器)时,它会停止JavaScript函数的执行,并仅在返回到前台时才执行它们。
这里有一个类似问题的线程,但是大多数解决方案都是某种黑客行为,例如将Webview添加到键窗口中,或者循环虚拟调用评估JavaScript,这样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];
Run Code Online (Sandbox Code Playgroud)
这种方法至少可以确保 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
Run Code Online (Sandbox Code Playgroud)
您也可以查看此帖子以查看不同的方法。
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |