如何让跨域通信在iframe中运行?

时间:2010-12-22 00:02:44

标签: javascript internet-explorer browser

我有一个基于iframe的在线帮助系统多年来一直运作良好。使用IE8,它会调用一些调用location.toString()的javascripting。这个代码在IE6中运行良好。

具体来说,代码是:

var iss = parent.left.location.toString();
var isInd = iss.indexOf("indexframe");

我收到“拒绝权限”错误。我认为这个问题与跨域通信有关,我不确定我是否完全理解。整个包使用本地HTML和javascript文件在本地运行。我不是试图让一个域中的帧控制另一个域中的帧。或者,假设这是问题,我可能会偏离基础。

有人可以帮我理解解决这个问题需要做些什么吗?

3 个答案:

答案 0 :(得分:1)

通常在访问另一个iframe的内容时,我会使用以下内容:

var f = document.getElementById('IdOfIFrame'), 
    d = f.contentDocument||f.contentWindow;
alert(d.location);

答案 1 :(得分:1)

如果iFrame和父文档位于同一个域中,则不应该出现该错误。它告诉我,这些文件属于不同的领域。

如果Iframe位于 www.mydomain.com 且文档位于 help.mydomain.com ,您将收到错误!页面必须认为它们位于完全相同的域中。

在这两个文件中你可以添加javascript设置域名:

document.domain = "mydomain.com";

Javascript将允许您在两个页面上放入主机域。这允许您跨框架进行通信。当然,如果页面位于不同的HOST域中,那么这将无效,javascript将引发错误。

答案 2 :(得分:-1)

如果您确实从您的站点访问了2个域,您拥有这两个域,则可以创建一个xml文件,指定应该允许哪些域共享。见the spec document。这种选择性跨站点访问不仅仅支持Adobe(MS Silverlight for one)。这是Silverlight的support spec