WKWebview [警告] [已阻止] https://www.myurl.com上的页面不允许显示来自mycustomscheme://?path = somepath的不安全内容

时间:2019-02-19 19:43:56

标签: ios wkwebview content-security-policy

我最近在混合应用程序中将UIWebview替换为WKWebview。我使用自定义方案从应用程序的本机部分加载图像,这是Apple在这里建议的: https://developer.apple.com/videos/play/wwdc2017/220/

我正在从看起来像mycustomscheme://?path=somepath的url中加载图像

我添加了Content-Security-Policy标头以允许混合内容,并且看起来像这样(删除了不相关的部分):

Content-Security-Policy: default-src 'self' www.myurl.com ; img-src 'self' mycustomscheme: ; script-src 'self' 'unsafe-inline' 'unsafe-eval' ; report-uri https://www.myreporturl.com/

这适用于大多数设备,并且允许对mycustomscheme的请求通过,如果有任何阻止,则向myreporturl报告。但是,在某些设备上,此错误阻止了自定义请求: [Warning] [blocked] The page at https://www.myurl.com was not allowed to display insecure content from mycustomscheme://?path=somepath,并且没有报告发送到myreporturl,就好像根本没有加载标头一样。

我已经确认标头确实已发送,并且有问题的设备正在运行最新的iOS(12.1.4)。

任何有关如何防止我的自定义请求被阻止的建议将不胜感激!

4 个答案:

答案 0 :(得分:1)

尝试以下操作来加载图像策略:

img-src 'self' 'unsafe-inline' 'unsafe-eval' data: http: https: mycustomscheme: filesystem: file:;

答案 1 :(得分:0)

原因:自iOS 9起,iOS仅允许您的应用程序与默认情况下实现最佳实践安全性的服务器通信。必须在Info.plist中设置值,以启用与不安全服务器的通信。

解决方案:在您的info.plist中添加以下代码以信任您的域。

<key>NSAppTransportSecurity</key>
 <dict>
 <key>NSExceptionDomains</key>
 <dict>
  <key>www.myurl.com</key>
  <dict>       
   <key>NSExceptionRequiresForwardSecrecy</key>
   <false/>
   <key>NSExceptionAllowsInsecureHTTPLoads</key>
   <true/>
   <key>NSIncludesSubdomains</key>
   <true/>
 </dict>
</dict>

答案 2 :(得分:0)

尝试一下:

在info.plist文件中添加以下行:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>mycustomscheme</string>
</array>

请确保将mycustomscheme更改为您自己的方案。

答案 3 :(得分:0)

其https和http问题确保所有内容均为https:。 在彼此内部使用多个网站资源将其混合在一起。 尽量不要做CORS。