无法加载图像科尔多瓦 - ios 9
Unable to load images cordova - ios 9
真是个奇怪的问题,到现在为止一切正常,但是当我们尝试将跨平台应用程序构建到具有 ios 9 的 iphone 5 时,图像不仅会出现,图像从 api 加载到 img src 也不起作用,特别是每当我尝试调用以下代码时。
<img ng-if="eachItem.Image.length > 0"
src="https://<name hidden>.s3.amazonaws.com/images/{{eachItem.Image}}"
fallback-src="images/no_foto.jpg" alt="" class="spac-bdr">
但有趣的是,在 ios 8 中一切正常。此外,api 一切正常。只是图片加载不出来。
但使用相同代码构建的 android 应用程序不存在此类问题。它似乎仅在具有 ios 9 OS.
的设备上影响应用程序 运行
知道如何解决这个问题吗?
认为尝试从其他服务器访问图像时出现了一些问题。虽然 api 指向不同的 api。 plist 的以下添加帮助我解决了这个问题。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
正如我已经在@Kailas 的回答下评论的那样,他发布的方式不是推荐的方式。请各位阅读本文的人:考虑一下您的应用程序的安全性!
虽然我已经告诉并链接了我的详细答案到 iOS 9 Ajax / ATS 问题,但由于完整性,我将在这里做一个完整的引用。
下面是全引号 -
据我了解整个 ATS (App Transport Security - iOS 9) 东西,area28 推荐的方法不应该是你想要的方法在应用程序内部使用。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
这将允许对每个域的所有外部请求,这绝对不是您应该使用它的方式。在我看来,您应该在 info.plist
中定义一个新的 <dict>
并将此代码添加到其中(要编辑 info.plist
您可以使用普通的文本编辑器,如 sublime text 等):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>domain.tld</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
这将只允许对您指定的域的请求。描述的方式是appleintroduced on the WWDC 2015的方式。正如您在屏幕截图中看到的,这是苹果希望用户使用它的方式。
如果您没有指定任何内容,您将得到
Failed to load webpage with error: The resource could not be loaded
because the App Transport Security policy requires the use of a secure
connection.
因此,按照我说的进行更改,错误就消失了。
确保 config.xml 文件中的路径来源具有拉取图像所需的域(例如,我的图像是从 AWS S3 提供的,所以我需要下面这一行)
<access origin="*s3.amazonaws.com*" subdomains="true" />
我通过在 xCode.
构建之前将其添加到 .plist 文件中解决了我的问题
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
如果您使用的是 cordova cli,则必须手动更改 config.xml
、plugin.xml
和 info.plist
文件。从 platforms/ios/ios.json
文件中删除配置。这将在每个 cordova 构建中重建所有以前的文件。
我在从图表 api 加载图像时遇到问题,所以我从 ios.json 文件中删除了它。
{
"xml": "<access origin=\"https://graph.facebook.com\" />",
"count": 1
}
真是个奇怪的问题,到现在为止一切正常,但是当我们尝试将跨平台应用程序构建到具有 ios 9 的 iphone 5 时,图像不仅会出现,图像从 api 加载到 img src 也不起作用,特别是每当我尝试调用以下代码时。
<img ng-if="eachItem.Image.length > 0"
src="https://<name hidden>.s3.amazonaws.com/images/{{eachItem.Image}}"
fallback-src="images/no_foto.jpg" alt="" class="spac-bdr">
但有趣的是,在 ios 8 中一切正常。此外,api 一切正常。只是图片加载不出来。
但使用相同代码构建的 android 应用程序不存在此类问题。它似乎仅在具有 ios 9 OS.
的设备上影响应用程序 运行知道如何解决这个问题吗?
认为尝试从其他服务器访问图像时出现了一些问题。虽然 api 指向不同的 api。 plist 的以下添加帮助我解决了这个问题。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
正如我已经在@Kailas 的回答下评论的那样,他发布的方式不是推荐的方式。请各位阅读本文的人:考虑一下您的应用程序的安全性!
虽然我已经告诉并链接了我的详细答案到 iOS 9 Ajax / ATS 问题,但由于完整性,我将在这里做一个完整的引用。
下面是全引号 -
据我了解整个 ATS (App Transport Security - iOS 9) 东西,area28 推荐的方法不应该是你想要的方法在应用程序内部使用。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
这将允许对每个域的所有外部请求,这绝对不是您应该使用它的方式。在我看来,您应该在 info.plist
中定义一个新的 <dict>
并将此代码添加到其中(要编辑 info.plist
您可以使用普通的文本编辑器,如 sublime text 等):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>domain.tld</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
这将只允许对您指定的域的请求。描述的方式是appleintroduced on the WWDC 2015的方式。正如您在屏幕截图中看到的,这是苹果希望用户使用它的方式。
如果您没有指定任何内容,您将得到
Failed to load webpage with error: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
因此,按照我说的进行更改,错误就消失了。
确保 config.xml 文件中的路径来源具有拉取图像所需的域(例如,我的图像是从 AWS S3 提供的,所以我需要下面这一行)
<access origin="*s3.amazonaws.com*" subdomains="true" />
我通过在 xCode.
构建之前将其添加到 .plist 文件中解决了我的问题<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
如果您使用的是 cordova cli,则必须手动更改 config.xml
、plugin.xml
和 info.plist
文件。从 platforms/ios/ios.json
文件中删除配置。这将在每个 cordova 构建中重建所有以前的文件。
我在从图表 api 加载图像时遇到问题,所以我从 ios.json 文件中删除了它。
{
"xml": "<access origin=\"https://graph.facebook.com\" />",
"count": 1
}