为啥 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上不能弹出来

为啥即使在 WKWebView 中设置 cookie 后 SSO 也不起作用?

在spss中打开process插件弹出窗口显示无法安装到任何指定位置是为啥啊?