在IE中document.domain的更改后空白的iframe:无法访问有关(Can't

2019-08-16 18:34发布

有谁知道任何变通办法来创建的about:blank的iframe在IE页面上时, document.domain改变?

IE似乎没有允许访问空/动态I帧后document.domain性质已经改变。

例如,假设你是动态创建一个iframe,然后注入一些HTML到它:

// Somewhere else, some 3rd party code changes the domain 
// from something.foo.com to foo.com 
document.domain = 'jshell.net';

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);

// In IE, we can't access the iframe's contentWindow! Access is denied.
iframe.contentWindow.document.body.style.backgroundColor = 'red';

这里有一个的jsfiddle活生生的例子: http://jsfiddle.net/XHkUT/

你会发现它在FF / WebKit的罚款,但不是IE浏览器。 这是特别令人沮丧,因为这会影响之后创建的I帧document.domain属性发生变化时(如上面的例子)。

IE的规则似乎是“如果你改变后创建动态/空的iframe document.domain ,你不能访问它的DOM。”

iframe的设置srcabout:blank javascript:void(0)javascript:""一直未果。

Answer 1:

你高兴的iframe的域改变? 在IE7,9下工作(对我来说)

document.domain = 'jshell.net';

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.src = "javascript:document.write('<script>document.domain=\"jshell.net\"</script>')";

// Now write some content to the iframe
iframe.contentWindow.document.write('<html><body><p>Hello world</p></body></html>');

编辑:如果这是内嵌脚本页面上,那么你需要拆分结束</script>标记起来。 见为什么-分裂的脚本标签



Answer 2:

我总是在iframe的src设置到住在同一个域父域空白文件围绕此类问题的工作。 如果有可能创建这样一个文件jshell.net ,我建议是这样的:

var iframe = document.createElement('iframe');
iframe.src = 'http://jshell.net/blank.html';
document.body.appendChild(iframe);

blank.html只包含一个小样板,例如:

<html><head><title>about:blank</title><head><body></body></html>


Answer 3:

如果iframe.src和document.location是不同的域(或子域),您可以通过定义没有从父母到孩子的访问。 但是,你必须从孩子到家长的访问。 之一的加载跨域JavaScript时使用的事实,当加载的IFRAME可以调用在容器窗口中的方法中使用的技术。

只有当这两个文件都在不同的子域,你可以调整的document.domain的匹配iframe.src的域名启用访问。

了解更多关于同源策略,在这里:

http://en.wikipedia.org/wiki/Same_origin_policy

http://softwareas.com/cross-domain-communication-with-iframes



文章来源: Can't access an about:blank iframe in IE after the document.domain changes