【问题标题】:WKWebview [Warning] [blocked] The page at https://www.myurl.com was not allowed to display insecure content from mycustomscheme://?path=somepathWKWebview [警告] [阻止] https://www.myurl.com 的页面不允许显示来自 mycustomscheme://?path=somepath 的不安全内容
【发布时间】:2019-07-13 09:42:11
【问题描述】:

我最近在我的混合应用程序中将 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)。

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

【问题讨论】:

    标签: ios wkwebview content-security-policy


    【解决方案1】:

    它的 https 和 http 问题确保您的所有内容都是 https:。 在另一个内部使用多个网站资源会混合它。 尽量不要做CORS。

    【讨论】:

    • 我想我在原帖中解释得不够清楚。我正在尝试将应用程序本身(应用程序的本机部分)中的图像加载到在 WKWebview 中运行的 JS 中,正如 Apple 在上面的链接中所建议的那样。使用 https 这样做没有意义。
    【解决方案2】:

    尝试以下加载图片策略:

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

    【讨论】:

    • 天哪,这似乎已经解决了。我不能说我明白为什么,但我会接受的!谢谢!
    • 欢迎您!我很高兴它有所帮助。此链接更详细地解释了 img-src 的选项。祝你好运! developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
    • 我遇到了同样的问题,但是加载了通过head 中的link 元素引用的本地样式表。 style-src 的工作方式有什么不同吗?
    【解决方案3】:

    试试这个:

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

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

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

    【讨论】:

    • 谢谢,但仍然被阻止。 LSApplicationQueriesSchemes 用于您要打开的 url。我不是想打开一个 url,我是想从本地代码传递一个图像。
    【解决方案4】:

    原因:从 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>
    

    【讨论】:

    • 试过了,但我仍然被阻止。另外,我的问题在于 JS 与应用程序的本机部分之间的通信,所以我不希望它被 NSAppTransportSecurity 阻止。
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2013-04-27
    • 2011-11-10
    • 2011-05-02
    • 2013-07-13
    • 2013-01-08
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多