Javascript 如何在iFrame中实现跨域通信?

Javascript 如何在iFrame中实现跨域通信?,javascript,internet-explorer,browser,Javascript,Internet Explorer,Browser,我有一个基于iframe的在线帮助系统,多年来一直运行良好。在IE8中,它会阻塞一些调用location.toString()的javascripting。同样的代码在IE6中也可以正常工作 具体而言,守则是: var iss = parent.left.location.toString(); var isInd = iss.indexOf("indexframe"); 我收到一个“权限被拒绝”错误。我相信这个问题与跨域通信有关,我不确定我是否完全理解。整个包使用本地HTML和javascr

我有一个基于iframe的在线帮助系统,多年来一直运行良好。在IE8中,它会阻塞一些调用location.toString()的javascripting。同样的代码在IE6中也可以正常工作

具体而言,守则是:

var iss = parent.left.location.toString();
var isInd = iss.indexOf("indexframe");
我收到一个“权限被拒绝”错误。我相信这个问题与跨域通信有关,我不确定我是否完全理解。整个包使用本地HTML和javascript文件在本地运行。我不想让一个域中的帧控制另一个域中的帧。或者我认为这就是问题所在,这可能有点离谱


有人能帮我理解我需要做什么来解决这个问题吗?

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

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

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

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

如果iFrame和父文档位于同一个域中,则不应出现该错误。这对我来说意味着这些文档位于不同的域中

如果Iframe位于www.mydomain.com中,而文档位于help.mydomain.com中,则会出现错误!页面必须认为它们位于完全相同的域中

在这两个文档中,您可以添加javascript设置域:

document.domain = "mydomain.com";

Javascript将允许您在两个页面上进入主机域。这允许您跨帧进行通信。当然,如果页面位于不同的主机域中,那么这将不起作用,javascript将抛出错误。

如果iFrame和父文档位于同一个域中,则不应出现该错误。这对我来说意味着这些文档位于不同的域中

如果Iframe位于www.mydomain.com中,而文档位于help.mydomain.com中,则会出现错误!页面必须认为它们位于完全相同的域中

在这两个文档中,您可以添加javascript设置域:

document.domain = "mydomain.com";

Javascript将允许您在两个页面上进入主机域。这允许您跨帧进行通信。当然,如果页面位于不同的主机域中,那么这将不起作用,javascript将抛出错误。

如果您确实从站点访问了两个域,并且您拥有这两个域,那么您可以创建一个xml文件,指定应允许共享哪些域。看见这种选择加入的跨站点访问不仅受到Adobe(微软Silverlight)的支持。这是Silverlight的。

如果您确实从站点访问了两个域,并且您拥有这两个域,那么您可以创建一个xml文件,指定应该允许共享哪些域。看见这种选择加入的跨站点访问不仅受到Adobe(微软Silverlight)的支持。这是Silverlight的。

是的。这也是困扰我的原因。我在本地运行整个shebang,所有文件都是本地的。我不明白为什么IE8认为事情是从不同的域运行的。运行本地?与“文件:/”中的相同?不,那不行。IE对本地运行的文件有完全不同的安全限制。您需要在web服务器上运行,并通过http://try IIS-express或cassini运行。我不太明白。为什么我不能创建一个帮助系统,其中所有HTML帮助文件都在iFrame中本地运行?左侧面板是一个TOC,它使右侧面板打开正确的HTML文件。它在WinXP上的IE6中运行良好。出于安全原因,他们确实锁定了您可以在本地执行的操作。此外,很难确定来自文件系统的文档的“域”。这里的解释是:是的。这也是困扰我的原因。我在本地运行整个shebang,所有文件都是本地的。我不明白为什么IE8认为事情是从不同的域运行的。运行本地?与“文件:/”中的相同?不,那不行。IE对本地运行的文件有完全不同的安全限制。您需要在web服务器上运行,并通过http://try IIS-express或cassini运行。我不太明白。为什么我不能创建一个帮助系统,其中所有HTML帮助文件都在iFrame中本地运行?左侧面板是一个TOC,它使右侧面板打开正确的HTML文件。它在WinXP上的IE6中运行良好。出于安全原因,他们确实锁定了您可以在本地执行的操作。此外,很难确定来自文件系统的文档的“域”。这里的解释是:我在笔记本电脑上运行。我的域应该是localhost。所有被拉入框架的HTML文件都和index.HTML文件在同一个文件夹中,index.HTML文件正在设置iframe。我的域应该是localhost。所有被拉入框架的HTML文件都与设置iframe的index.HTML文件位于同一文件夹中。