【问题标题】:Enable session cookies for iframe in page in WkWebView / mobile Safari在 WkWebView / 移动 Safari 的页面中为 iframe 启用会话 cookie
【发布时间】:2017-06-15 22:38:23
【问题描述】:

我有一个网站,该网站被 iframe 嵌入到第 3 方网页中,该网页本身嵌入在 iOS 应用程序的 WkWebView 中。 Mobile Safari 和WkWebView 拒绝为我的网站发送的会话(仅限http)cookie,基本上破坏了一切。移动 Safari 中的解决方法是启用设置中的所有 cookie(糟糕)或指示用户直接访问我的网站(因此,就 Safari 而言,它算作“我访问过的网站”);这些都不是特别好吃。我没有找到WkWebView 的解决方法。

这个问题分为两部分:

1) 我正在考虑在我的网站中实现重定向服务,该服务将目标 URL 作为参数,并在页面加载时简单地将用户重定向到该 URL。然后,第 3 方站点可以链接到我的重定向页面,并将 URL 设置为立即将用户发送回来,希望这将被视为“访问”我的域,从而能够加载 cookie。

或者,第 3 方网站可以为我的网站打开一个新标签,该标签会在加载时立即关闭。然而,我预计这将是一个不太理想的用户体验,因此不希望走这条路。

最好的办法是“POST 到隐藏的 iframe”技巧(第 3 方页面在隐藏的 iframe 中发布到我的域),但 SO 问题表明该技巧不再有效。

这些是可行的解决方案,还是 Apple 也阻止了这些设置会话 cookie 的方法?有没有更好的解决方案我没有考虑过?

2) 有没有办法用WkWebViews 设置cookie 接受政策,就像UiWebViews 一样?我对 StackOverflow 的搜索表明没有,但我阅读的答案可能基于旧版本的 iOS(该应用需要 iOS 9+)。

如果WkWebViews 没有应用代码解决方案,移动版Safari 的解决方案是否也适用于WkWebViews

【问题讨论】:

  • 我遇到了同样的问题,UIWebView。我通过实现一个覆盖内置 HTTP/HTTPS 协议的 NSURLProtocol 子类来修复它。您可以检查 WKWebView 是否适用于 NSURLProtocol。至于如何继承 NSURLProtocol,可以查看苹果的示例代码:CustomHTTPProtocol
  • 你有没有找到更多关于这个的信息?
  • @jdeuce 不,我没有。
  • 你找到解决办法了吗?
  • 抱歉,我没有。不过,在过去 3 年中,可能发生了一些变化,使这成为可能。

标签: ios iframe mobile-safari session-cookies wkwebview


【解决方案1】:

我刚刚遇到了类似的问题。我有一个 WkWebView 加载我的 web 应用程序,该应用程序有一个 iframe 从特定服务器加载登录屏幕。登录页面会抱怨 iframe 不允许使用 cookie。

当我直接在 web 视图中加载登录页面时,它会工作,而且当我后来在 iframe 中再次测试它时,它也会奇怪地开始工作。

对此我找到的最佳解释是,只有当 Web 视图直接加载 iframe 的域至少一次时,才允许将 cookie 保存在 iframe 中。知道了这一点,我能够实施一种解决方法。

通过简单地使用 webview ping 登录页面一次,我使用 WKNavigationDelegate 等到我开始从服务器接收一些数据。一旦发生这种情况,我会让 web 视图加载包含 iframe 的页面。现在 iframe 能够持续加载登录屏幕。

【讨论】:

  • 为了摆脱这一点,您无需实际发出请求即可获得 ping 的效果。只需运行以下命令,Safari 就会认为它访问了您的域。 [webView loadHTMLString:@"" baseURL:URL_WITH_YOUR_DOMAIN];
  • 这似乎不再适用于 iOS 13.3。其他人可以确认吗?
  • 有人能解释一下我如何用 WebView “ping”吗?我从来没有做过任何 iOS 原生开发,所以我完全迷路了。我尝试使用上面建议的 loadHTMLString 函数,但这会将我的 WebView 的内容替换为空白屏幕,我不希望这样,因为我可以在应用程序的不同位置拥有 iframe。
猜你喜欢
  • 2020-01-05
  • 1970-01-01
  • 2013-02-18
  • 2011-02-20
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
相关资源
最近更新 更多