无法加载图像科尔多瓦 - 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.xmlplugin.xmlinfo.plist 文件。从 platforms/ios/ios.json 文件中删除配置。这将在每个 cordova 构建中重建所有以前的文件。 我在从图表 api 加载图像时遇到问题,所以我从 ios.json 文件中删除了它。

{
   "xml": "<access origin=\"https://graph.facebook.com\" />",
   "count": 1
}