为啥 WKWebView 无法运行 processingjs 脚本?
Posted
技术标签:
【中文标题】为啥 WKWebView 无法运行 processingjs 脚本?【英文标题】:Why does WKWebView fails to run processingjs script?为什么 WKWebView 无法运行 processingjs 脚本? 【发布时间】:2017-05-19 13:12:09 【问题描述】:我需要在 ios 的 webview 中运行一些 processing.js 脚本(本地资源中的 html/js)。首先我尝试使用UIWebView
,然后我看到文档建议使用WKWebView
以获得更好的性能。于是我写了如下代码:
if NSClassFromString("WKWebView") != nil
let webConfiguration = WKWebViewConfiguration()
wkWebView = WKWebView(frame: self.view.bounds, configuration:webConfiguration)
wkWebView!.scrollView.isScrollEnabled=false
wkWebView!.uiDelegate = self
self.view.addSubview(wkWebView!)
wkWebView!.load(request)
else
uiWebView = UIWebView(frame: self.view.bounds)
uiWebView!.scrollView.isScrollEnabled=false
self.view.addSubview(uiWebView!)
uiWebView!.loadRequest(request)
处理动画只运行在UIWebView,不运行在WKWebView;页面本身(画布以外的元素)可以使用 WK 正确呈现,但画布是空白的。
我已经在 iOS 10.3、iOS 8 上试过了。
我想也许我需要以某种方式配置 WKWebView。但在文档中没有找到这样的配置选项。
有人注意到这里有同样的问题吗?
与这个问题相关:我应该如何在 iOS 的 webview 中调试 javascript(类似于桌面 Chrome 中的控制台)?
【问题讨论】:
【参考方案1】:我至少可以肯定地回答调试方面的问题(并指出为什么它通常会失败)。
可以在您的 (macOS) Safari 中进行调试。激活开发人员菜单(设置 - 高级 - “在菜单栏中显示开发菜单”)。在上述菜单中,一旦您的应用程序运行(在模拟器中或连接的设备上),您可以选择您的设备/模拟器,然后连接到您的应用程序(或者更确切地说是 web 视图)。
一般来说,问题可能是文件权限甚至 ATS 问题。如果我正确地理解了您,那么您正在从本地文件构建您的请求。这可能会影响它的治疗方式,但我承认我不确定。 WKWebView
在这方面更严格。您可能还想确保标准配置使用的WKPreferences
对象满足您的需要。它有几个关于 Java 和 JS 的属性(默认情况下通常允许使用 JS,但它不能打开窗口,例如)。
哦,我假设您没有在设备/模拟器的“设置”应用中停用 JS?
【讨论】:
准确!在 Safari 中调试就像一个魅力,控制台报告资源加载失败:预检响应不成功。 Processing.js 正在 AppBundle 中加载文件并失败。我环顾四周,这似乎是原因:openradar.me/18039024。我现在只使用 UIWebView。谢谢!以上是关于为啥 WKWebView 无法运行 processingjs 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 iOS 9 上的 WKWebView 中的音频流无法播放?
为啥 wkwebview 在科尔多瓦的运行速度比移动 safari 慢?
为啥我的 WKWebView 的故事板表示看起来与在模拟器上运行的不同?
ios开发h5页面有一个加载框为啥我在wkwebview上不能弹出来