来自Apple 开发者常见问题解答
Safari附带了保守的cookie策略,该策略将cookie写入仅限于用户选择("导航到")的页面.
默认情况下,Safari仅允许您直接导航到的网站的Cookie.(即,如果您点击具有该域名的URL的链接).
这意味着,如果您使用带有来自其他网站的网页的iFrame从您自己的网站加载网页,则其他网站无法设置Cookie.(例如,售票处).一旦您直接访问了其他域,另一个站点就能够访问和更改自己的cookie.
如果无法访问其他网站上的代码,我怎样才能使用户体验尽可能不引人注目?
是否有(javascript?)方式检查其他网站的cookie是否已设置,并相应地,如果需要,首先显示与其他网站的直接链接?
更新:
HTML5功能'window.postmessage'似乎是一个不错的解决方案.
有一些jQuery库可能有所帮助,并且与最新的浏览器兼容.
本质上,iFrame文档通过窗口元素与Json一起发送消息.
非常好的Postmessage插件,由daepark,我工作.
另一个jQuery postMessage,由Ben Alman发现,但我没有测试过.
我不久前问了这个问题,发现IE阻止了iframe中的跨域cookie,除非你设置了p3p策略.到目前为止,p3p修复程序在ie中运行得非常好.但是,现在我们在safari中遇到了同样的错误.
我找到了一篇针对safari 的不同p3p政策的文章.我添加了此代码来设置p3p策略,但我仍然收到请求验证令牌错误.
public static void SetP3PCompactPolicy()
{
HttpContext current = HttpContext.Current;
if (current.Request.UserAgent.ToLower().IndexOf("safari") >= 0)
HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"");
else
HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是什么意思,但它不适用于Safari(5).
此外,当我收到服务器错误时,所有信息都会在报告中发送给我,包括所有http标头.p3p标头永远不会出现在这些错误中.我不确定这是否是设计或是否是问题的指标.