在WkWebView/mobile Safari中为页面中的iframe启用会话cookie



我有一个网站,它被iframe为第三方网页,它本身嵌入在iOS应用程序的WkWebView中。Mobile Safari和WkWebView拒绝为我的网站发送会话(仅限http)cookie,基本上破坏了一切。移动Safari的解决方案是在设置中启用所有cookie(没错),或者指示用户直接访问我的网站(因此,就Safari而言,它被视为"我访问过的网站");这两种都不是特别可口。我没有找到WkWebView的解决方案。

这个问题由两部分组成:

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

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

最棒的是"发布到隐藏的iframe"技巧(第三方页面在隐藏的ifame中发布到我的域),但正如SO问题所表明的那样,该技巧不再有效。

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

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

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

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

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

对此,我找到的最好的解释是,只有当web视图直接加载了iframe的域至少一次时,cookie才允许保存在iframe中。知道了这一点,我就能够实现一个变通方法。

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

最新更新