我们经常有父页面操作和iframe页面,如



这个iframe内容用js编写的。例如,下面的代码


VaR IFRAME = document.getelementbyid(iframe),
doc = iframe.contentwindow.document;
Doc.open();
doc.write(---------东西------ );
Doc.close();


上面的代码在大多数情况下是正确的。但是还有一种情况,父页面明确写document.domain =XXX;

在IE系列(IE10没有尝试)将没有权限错误。在Firefox、Chrome都是正确的。

为什么会这样这是一个bug,当父页面没有显式设置document.domain,iframe将默认的document.domain是父页面一致。

location.host,父子页面能够沟通,就是文章标题的例子,但当父页明确设定文档。域=

不允许有iframe.contentwindow.document,即事实上是没有办法写内容动态,,它也可以让iframe指向特定的页面。页面是显式设置的。

写的方式,但问题是,我的父页面中有很多这样的iframe,数目不详(都是广告位),所以它不能通过一个特定的页面。

这就是问题所在,在这种情况下,我们似乎没有办法做到这一点。

1。父页面设置,必须显式设置为document.domain

2.iframe页的内容需要通过js动态生成。

三.没有机会设置src iframe。

但当上述3个条件都满足时,就可以用伪协议解决这类问题。

复制代码代码如下所示:

iframe。src=Javascript:无效((((){ var a功能文档;D.开放();d.domain = 'xxx;d.write(' --- ');d.close()}));



In this way, you can explicitly set the iframe's document.domain to be consistent with the parent page.

当这是书面的,对于iframe内容动态写作的要求确实落实,但页面将单独演奏,喜欢window.open();

为什么会这样这也是IE系列,这是错误的,父页面,和内容的iFrame的伪协议写的会弹出一个新页面像window.open。

但父页面必须_self,所以基地的目标只能被设置为_self之前调用iframe.src。在内容编写,目标是将_blank基地。

这是解决这个问题的办法。

虽然伪协议可以解决这个问题,但也有一些风险,如果不能不可以,不要只使用这种方式。