WKWebView如何显示http:pages

时间:2017-01-09 21:21:05

标签: ios wkwebview app-transport-security

我有一个WKWebView,它会使用在线收集的链接显示用户的网页。 有时,这些链接http:ATS阻止。 我尝试过简单地将链接更改为https:,这有时会起作用。

但是,我经常收到错误“发生了SSL错误,无法与服务器建立安全连接”。

有时页面只是重定向到http:,再次被阻止。 其他时候,https:页面只是“未找到”。 仅删除http:会导致"Unsupported URL"错误。

有没有办法让WKWebView显示这些页面?

请不要“建议NSAllowsArbitraryLoads,甚至是每个域的例外情况(我事先并不知道域名是什么)。 这些页面在Safari上完全加载,甚至是移动游猎,所以它必须是可能的。

2 个答案:

答案 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>