我有一个WKWebView
,它会使用在线收集的链接显示用户的网页。
有时,这些链接http:
被ATS
阻止。
我尝试过简单地将链接更改为https:
,这有时会起作用。
但是,我经常收到错误“发生了SSL
错误,无法与服务器建立安全连接”。
有时页面只是重定向到http:
,再次被阻止。
其他时候,https:
页面只是“未找到”。
仅删除http:
会导致"Unsupported URL"
错误。
有没有办法让WKWebView
显示这些页面?
请不要“建议NSAllowsArbitraryLoads
,甚至是每个域的例外情况(我事先并不知道域名是什么)。
这些页面在Safari上完全加载,甚至是移动游猎,所以它必须是可能的。
答案 0 :(得分:6)
所以,简短的回答是NSAllowsArbitraryLoadsInWebContent
,它在iOS 10中运行良好。但是,如果你尝试在iOS 9设备上的Info.plist中运行它,它就不会工作。
如果您希望这在iOS 9和iOS 10上都有效,那么Apple建议您做的是 NSAllowsArbitraryLoads
AND {{在Info.plist中1}}。
在iOS 9中,由于它不识别NSAllowsArbitraryLoadsInWebContent
条目,因此它将允许应用中的所有http内容(包括您的WKWebview)。这并不理想,但只要您确保您在其他地方的关键连接是安全的,那么让Apple强制执行它并不会做太多事情。
在iOS 10(大多数用户应该运行)中,如果NSAllowsArbitraryLoadsInWebContent
看到NSAllowsArbitraryLoads
,则iOS会忽略NSAllowsArbitraryLoadsInWebContent
。这意味着您的应用程序网络通信的其余部分将需要遵循ATS的安全要求,而WKWebView和UIWebView则不需要。这不是一个很好的解决方案,但是当你需要同时支持iOS 9和10时,它是Apple工程师推荐的解决方案。
请注意,当Apple确实开始要求ATS例外的理由时,NSAllowsArbitraryLoadsInWebContent
条目是触发理由需求的条目之一。但是,它比单独使用NSAllowsArbitraryLoads
更好,你可以把它放在你的理由中,它应该被Apple接受。
答案 1 :(得分:1)
在this article中发布,在NSAppTransportSecurity
中添加顶级属性info.plist
,如果iOS版本为10及更高版本,请为NSAllowsArbitraryLoadsInWebContent
添加一个布尔条目这个字典,否则NSAllowsArbitraryLoads
,这样plist条目看起来像
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>