2

我有一个问题,我有一个框架集,其中包含从一个域加载的父框架和来自不同域的包含框架。包含的域还会在加载框架集之前设置一个 cookie。但是,由于大多数浏览器强制执行“相同来源”策略,如果包含的框架与父级不同域,则它不会传递 cookie。

不幸的是,我无法控制父框架(或其 url),并且包含框架的 url 实际上是静态的。因此,将信息传递到所包含站点的唯一方法是通过 cookie。

我想出的唯一解决方案是在父框架中重新加载包含的域,但这首先否定了使用框架的一些价值。

有没有人有更好的解决这个问题的方法?

4

4 回答 4

2

有几种方法可以绕过阻止您的 iframe 相互通信的同源策略。如果您控制两个服务器,那么您可以使用Flash 的 crossdomain.xml 文件。如果您不控制其中一台服务器或者您想使用 JavaScript,那么您将被迫使用“跨域代理”,例如用于javapythonphp的这个。

Cross-Site XHR是另一种选择,但并非所有浏览器都支持。

于 2010-05-26T08:19:55.547 回答
1

One more thought in to this, where u can use Cross Domain Messaging API to send messages from one frame to another. here is an example! Read more on this.

于 2012-11-07T05:47:20.443 回答
1

有很多方法可以做到这一点。这是我用过的两个:

  1. 让父母和孩子都使用标签从公共来源加载脚本。以这种方式加载的脚本没有同源问题,它们返回的数据成为文档对象的一部分,并且可以与文档加载的其他脚本进行交互(这就是 AJAST 的工作方式)。
  2. 在父域中创建反向代理,并通过此代理加载帧。对于浏览器来说,它们似乎都来自同一个域。缺点是这会影响缓存,并绕过您可能正在使用的任何内容交付网络(例如,Akamai)。
于 2009-07-15T12:59:35.707 回答
1

在 HTML 5 中使用 postMessage 也有正确的方法。见这里:http ://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage

于 2009-07-15T13:01:56.970 回答