来自Apple 开发者常见问题解答
Safari附带了保守的cookie策略,该策略将cookie写入仅限于用户选择("导航到")的页面.
默认情况下,Safari仅允许您直接导航到的网站的Cookie.(即,如果您点击具有该域名的URL的链接).
这意味着,如果您使用带有来自其他网站的网页的iFrame从您自己的网站加载网页,则其他网站无法设置Cookie.(例如,售票处).一旦您直接访问了其他域,另一个站点就能够访问和更改自己的cookie.
如果无法访问其他网站上的代码,我怎样才能使用户体验尽可能不引人注目?
是否有(javascript?)方式检查其他网站的cookie是否已设置,并相应地,如果需要,首先显示与其他网站的直接链接?
更新:
HTML5功能'window.postmessage'似乎是一个不错的解决方案.
有一些jQuery库可能有所帮助,并且与最新的浏览器兼容.
本质上,iFrame文档通过窗口元素与Json一起发送消息.
非常好的Postmessage插件,由daepark,我工作.
另一个jQuery postMessage,由Ben Alman发现,但我没有测试过.
safari和所有现代浏览器支持的localStorage甚至允许在加载到iframe中的页面上进行读/写操作.如果您不介意放弃对ie6和ie7的支持,请尝试在框架网站中使用localStorage而不是cookie.我知道你的问题具体说你没有访问框架网站上的代码,但对于那些做的人来说,localStorage肯定解决了"没有Safari中的cookie问题"的问题.
这是一个称为同源策略的问题.从本质上讲,它是一种防范创建安全漏洞的安全措施.
当您的iframe指向您自己域中的网页时,JavaScript可以同时访问您所在的网页和Iframe中的网页.这是孩子和孩子与父母关系的可接受的父母.
(parent doc) (iframe doc) HTML --> IFRAME <-- HTML ^--------|---------^
但是,一旦你有一个指向外部页面的文件,SOP就会起作用,并且会在父页面和iframe页面之间传递任何信息.
(parent doc) (iframe doc) HTML --> IFRAME <-- HTML X
看看这篇关于iframe通信的帖子,它很有意义! Stackoverflow帖子
这些链接真的很有帮助!
1) 浏览器中的安全跨域通信
2) wiki SOP或同源策略
祝好运!