Cordova 5.3.1 和 iOS9 平台 - 我无法从外部源加载图像和脚本

Posted

技术标签:

【中文标题】Cordova 5.3.1 和 iOS9 平台 - 我无法从外部源加载图像和脚本【英文标题】:Cordova 5.3.1 and iOS9 platform - I can't load images and scripts form external sources 【发布时间】:2015-09-19 10:23:48 【问题描述】:

最初我试图通过 Socket.io 建立连接,但很快发现“外部”的任何内容都无法加载到我的 Cordova/ios 应用程序中。 我检查了 config.xml 中的白名单设置。他们似乎很好,但以防万一我添加了

不幸的是,这没有帮助。 我试图删除白名单插件

cordova plugin add org.apache.cordova.whitelist

项目中不存在插件“cordova-plugin-whitelis”。看 cordova plugin list.

所以我检查了cordova插件列表并返回了

cordova-plugin-console 1.0.1 "Console"
cordova-plugin-dialogs 1.1.1 "Notification"
cordova-plugin-vibration 1.2.0 "Vibration"
cordova-plugin-whitelist 1.1.0 "Whitelist"

我猜上面那个可能是某种默认的?

我的下一个尝试是从 index.html 中删除以下元标记

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">

但这也无济于事......

【问题讨论】:

【参考方案1】:

在与 Cordova 设置苦苦挣扎数小时后,我仍然不确定我安装了哪些白名单,以及设置它的最佳方法是什么 但肯定帮助我的一件事是插入Info.plist(可能类似于HelloWorld-Info.plist

以下标签

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

之后我可以通过 web-socket 连接或加载外部图像!

我希望这对其他人有所帮助。

【讨论】:

这将很快与白名单插件一起出现 现在,您可以将其自动化,如这里的答案所示:***.com/questions/32561228/…【参考方案2】:

iOS 9 有一个名为 App Transport Security (ATS) 的新安全功能,它强制在来自 HTML5 应用程序(如 Cordova 或 Ionic)的 AJAX 调用中使用 https。通过添加 Adam 上面提到的 NSAppTransportSecurity 标记,有一个新插件可以覆盖此行为。它被称为“cordova-plugin-disable-nsapptransportsecurity”。要修复自己,只需运行以下命令:

cordova 插件添加 cordova-plugin-disable-nsapptransportsecurity

有关此问题的更多信息,请参见此处: iOS9 ATS: what about HTML5 based apps?

插件信息在这里: https://www.npmjs.com/package/cordova-plugin-disable-nsapptransportsecurity

此解决方案独立于白名单插件,在 iOS 中似乎没有效果。你也可以不为 iOS 安装它。

【讨论】:

【参考方案3】:

我不确定图像的来源是来自“http”协议还是“https”。我的图片都来自“http”,显示不正确。将源更改为 https 后,它开始显示图像。

【讨论】:

以上是关于Cordova 5.3.1 和 iOS9 平台 - 我无法从外部源加载图像和脚本的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 Ionic Cordova 应用程序在 iPhone 上崩溃;在 iPad 上工作

IOS 9与cordova 4.2的加载问题

确定 Cordova 无法在 iOs 9 中启动但在 iOs 10 中正常工作的原因

如何在 Cordova 中使用平台预装的铃声?

无法从cordova CLI 将android 平台添加到cordova 项目

Ajax 在 IOS 9.0 Cordova 中不工作