ios - WKWebView 自定义 URL 方案不适用于 https? (混合内容被屏蔽)

标签 ios swift safari wkwebview app-transport-security

我有一个 WKWebView 来加载一个网站,该网站具有使用 WKURLScheme 实现的自定义 url 方案 (mycustomurl://),网站将使用 GET 调用该方案。 当网站位于 http://时一切正常,但当我切换到 https://时出现以下错误并中断:

[blocked] The page at https:// (url snipped) was not allowed to display insecure content from mycustomurl://(url snipped). 

WKURLScheme 回调从未被触发,所以我怀疑 Safari 或更强大的功能阻止了它:/

我已经梳理了关于 ATS 的 SO 讨论,但没有一个有效。 我确实看到一些像 this one 这样的讨论提到这是因为 Safari 阻止了混合内容,当我直接在 Safari 上尝试它时它确实产生了相同的结果(被阻止)。

这个好像没有解决办法?看来我们无法关闭 Safari 的混合内容限制。 那么应该如何使用和实现自定义 URL 方案,因为 https 应该总是比 http 更好的选择?

我确实注意到大多数自定义 URL 方案教程都使用 http 而不是 https...

最佳答案

不确定这个答案是否仍然相关,但实际可行的解决方案是使用自定义 WKUrlSchemeHandler 从中加载初始 https 页面。

我最近遇到了类似的问题(尝试从 https 页面连接到设备上的 WebSocket 服务器),我发现在保持应用程序受 https 保护的同时使它正常工作的唯一方法是以下不那么-很好的解决方法:

  • mycustomurl:// 注册您的自定义 WKUrlSchemeHandler
  • 注册一个第二个自定义WKUrlSchemeHandler,比方说myapp-remote://
  • webView:startURLSchemeTask: 中:
    • urlSchemeTask.Request 中检索请求 url>
    • myapp-remote:// 替换为 https://
    • 使用 https-url 创建一个 NSURLDataRequest
    • 将响应和获取的数据返回给 urlSchemeTask

通过此设置,您可以使用 myapp-remote:// 作为初始加载的架构来获取您的 https 页面,保持 TLS 安全和验证,并且还可以使用 mycustomurl :// 引用您的 WKWebView 不会阻止。

我的实现是在 C# 中为 Xamarin 实现的,但如果需要,我可以提供它以清楚起见。

关于ios - WKWebView 自定义 URL 方案不适用于 https? (混合内容被屏蔽),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49826107/

相关文章:

ios - 将 UITapGestureRecognizer 添加到 tableViewCell 上的 subview

ios - 按下时向 SKSpriteNode 添加视觉效果

ios - 在 IOS 中共享图像/链接到我的应用程序

ios - 如何在 Swift 中获取 X509Certificate 字段

ios - 在 Navigation Bar 停留和 Tab Bar 消失的地方执行 segue

ios - Cocos2d-x ReplaceScene 导致应用程序崩溃

swift - 逗号自动添加到 Swift 中的 TextField

objective-c - 函数中的变量是否对其对象具有强引用,或者可以在函数体的运行时释放它们吗?

javascript - 为什么固定元素在放大 (iPad) 时超出视口(viewport)?

javascript - 如何使 CSS 属性动画在 Safari 中像在 Google Chrome 中一样工作?