WKWebview [警告] [已阻止] https://www.myurl.com 的页面不允许显示来自 mycustomscheme://?path=somepath 的不安全内容
WKWebview [Warning] [blocked] The page at https://www.myurl.com was not allowed to display insecure content from mycustomscheme://?path=somepath
我最近将我的 UIWebview
替换为我的混合应用程序中的 WKWebview
。我正在使用自定义方案从应用程序的本机部分加载图像,正如 Apple 在此处推荐的那样:
https://developer.apple.com/videos/play/wwdc2017/220/
我正在从看起来像 mycustomscheme://?path=somepath
的 url 加载图像
我添加了 Content-Security-Policy header 以允许混合内容,看起来像这样(不相关的部分已删除):
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
,就好像根本没有加载 header。
我已确认 header 确实已发送,并且有问题的设备是 运行 最新的 iOS (12.1.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>
试试这个:
在您的 info.plist 文件中添加以下行:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mycustomscheme</string>
</array>
确保将 mycustomscheme
更改为您自己的方案。
尝试以下加载图像策略:
img-src 'self' 'unsafe-inline' 'unsafe-eval' data: http: https: mycustomscheme: filesystem: file:;
它的 https 和 http 问题请确保您的所有内容都是 https:。
在彼此内部使用多个网站资源将其混合在一起。
尽量不要做 CORS。
我最近将我的 UIWebview
替换为我的混合应用程序中的 WKWebview
。我正在使用自定义方案从应用程序的本机部分加载图像,正如 Apple 在此处推荐的那样:
https://developer.apple.com/videos/play/wwdc2017/220/
我正在从看起来像 mycustomscheme://?path=somepath
我添加了 Content-Security-Policy header 以允许混合内容,看起来像这样(不相关的部分已删除):
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
,就好像根本没有加载 header。
我已确认 header 确实已发送,并且有问题的设备是 运行 最新的 iOS (12.1.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>
试试这个:
在您的 info.plist 文件中添加以下行:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mycustomscheme</string>
</array>
确保将 mycustomscheme
更改为您自己的方案。
尝试以下加载图像策略:
img-src 'self' 'unsafe-inline' 'unsafe-eval' data: http: https: mycustomscheme: filesystem: file:;
它的 https 和 http 问题请确保您的所有内容都是 https:。 在彼此内部使用多个网站资源将其混合在一起。 尽量不要做 CORS。