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

时间:2017-01-30 17:08:45

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

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

这个问题分为两个部分:

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

或者,第三方网站可以打开我的网站的新标签,该标签会在加载时立即关闭。我希望这会是一种不太理想的用户体验,所以不愿意走这条路。

最重要的是“POST到隐藏的iframe”技巧(第三方页面在隐藏的iframe中发布到我的域名),但是因为SO问题表明该技巧不再有效。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

当我直接在网页视图中加载登录页面时,它会起作用,当我在iframe中再次测试后,它也会好奇地开始工作。

我发现的最佳解释是,如果网络视图已直接加载iframe的域至少一次,则只允许将Cookie保存在iframe中。知道了这一点,我就能够实施一种解决方法。

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