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 上工作
确定 Cordova 无法在 iOs 9 中启动但在 iOs 10 中正常工作的原因