【问题标题】:WKWebView How to display links to http: pagesWKWebView 如何显示指向 http: pages 的链接
【发布时间】:2017-05-24 06:04:58
【问题描述】:

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

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

有时页面只是简单地重定向到http:,它又被阻止了。 其他时候https: 页面只是“未找到”。 删除http: 只会导致"Unsupported URL" 错误。

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

请不要建议NSAllowsArbitraryLoads,甚至是每个域的例外(我事先不知道这些域是什么)。 这些页面在 Safari 甚至移动 safari 上都能完美加载,所以它一定是可能的。

【问题讨论】:

  • 有一个NSAllowsArbitraryLoadsInWebContent 异常键,允许在 Web 视图中加载任意 url。
  • 非常感谢丹。这是一种享受。你拯救了这一天:-)

标签: ios wkwebview app-transport-security


【解决方案1】:

this article中所说,在info.plist中添加一个顶级属性NSAppTransportSecurity,然后如果iOS版本为10及以上,则在此字典中为NSAllowsArbitraryLoadsInWebContent添加一个布尔条目,否则为NSAllowsArbitraryLoads,这样 plist 条目看起来像

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoadsInWebContent</key>
  <true/>
</dict>

【讨论】:

    【解决方案2】:

    所以,简短的回答是NSAllowsArbitraryLoadsInWebContent,它在 iOS 10 中运行良好。但是,如果您尝试在 iOS 9 设备上的 Info.plist 中运行它,它将无法运行。

    如果您希望它同时在 iOS 9 和 iOS 10 上运行,Apple 建议您将 both NSAllowsArbitraryLoads AND NSAllowsArbitraryLoadsInWebContent 放入你的 Info.plist。

    在 iOS 9 中,由于它无法识别 NSAllowsArbitraryLoadsInWebContent 条目,它将允许应用程序中的所有 http 内容(包括您的 WKWebview)。这并不理想,但只要您确保其他地方的关键连接是安全的,让 Apple 强制执行它实际上并没有多大作用。

    在 iOS 10(您的大多数用户都应该运行)中,如果 iOS 也看到 NSAllowsArbitraryLoadsInWebContent,它将忽略 NSAllowsArbitraryLoads。这意味着您的应用程序网络通信的其余部分将需要遵循 ATS 的安全要求,而 WKWebView 和 UIWebView 则不需要。这不是一个很好的解决方案,但是当您需要同时支持 iOS 9 和 10 时,它是 Apple 工程师推荐的解决方案。

    请注意,当 Apple 确实开始要求 ATS 例外的理由时,NSAllowsArbitraryLoadsInWebContent 条目是触发需要理由的条目之一。但是,它比拥有NSAllowsArbitraryLoads 本身要好,你可以把它放在你的理由中,它应该被 Apple 接受。

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多