我有一个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
?
答案 0 :(得分:2)
我刚才有类似的问题。我有一个WkWebView加载我的web应用程序,它有一个iframe从特定服务器加载登录屏幕。登录页面会抱怨iframe不允许使用cookies。
当我直接在网页视图中加载登录页面时,它会起作用,当我在iframe中再次测试后,它也会好奇地开始工作。
我发现的最佳解释是,如果网络视图已直接加载iframe的域至少一次,则只允许将Cookie保存在iframe中。知道了这一点,我就能够实施一种解决方法。
通过简单地使用webview对登录页面进行一次ping操作,我使用WKNavigationDelegate等待,直到我开始从服务器接收一些数据。一旦发生这种情况,我会在网页视图中加载包含iframe的页面。现在,iframe能够始终如一地加载登录屏幕。