我们的iOS应用程序使用自定义协议(NSURLProtocol)直接管理加载UIWebview所需的某些数据。这在使用XCode 7的iOS 9之前一直运行良好。
现在,由于主站点是使用HTTPS加载的,因此UIWebview在引用自定义协议资源时会抛出错误,因为它认为它不安全(事实上,它不是,我们使用SSL加载它,而不是https:/ /)。该应用程序已经构建了“允许任意加载”,因为我们还有一些其他需要的东西,我本以为这继承了NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads,它似乎正在遇到,但谁知道。
有没有办法说服iOS 9可以从HTTPS访问我们的自定义协议?注意 - 我们不在UIWebview中使用iframe或类似的东西 - 使用Ajax / XHR请求这些资源,并调用应用程序的NSURLProtocol并接管加载数据并返回响应。
自定义方案也列在URL类型中,但这似乎不会改变任何行为(输入或输出,相同的错误)。这是具体的错误:
[已屏蔽]不允许https://example.com/path/redacted上的页面显示来自mycustcomprotocol的不安全内容://different.example.com/path/redacted。
编辑: 下载了Xcode 6.4,重建了应用程序,它似乎在iOS 9.x上运行正常,自定义协议没有问题。显然,这不是这是一个长期的解决方案。希望有人仍然对Xcode 7 +中的解决方法有所了解。
答案 0 :(得分:1)
我怀疑这个问题是,https提供的网页通常不允许包含从任何URL加载的资源,这些URL的方案不在特定的已知安全方案列表中(至少在较新的浏览器中)。
解决此问题的最佳方法是重写您的资源网址,以https开头:并将它们全部放在您拥有的特定子域中,并永久禁止该子域的任何实际网络使用,然后使用它确定您的URL协议是否应该处理URL,而不是使用URL方案。
话虽如此,请提交错误并要求API将您的自定义协议列入白名单,以便在UIWebView和WKWebView中“具有潜在的安全性”。在这种情况下,这是合理的事情。
有关混合内容的详细信息,请参阅http://www.w3.org/TR/mixed-content/