我创建了一个友好的 iframe(相同的域)并使用 JavaScript 将它添加到 DOM。它在我的页面上可见。检查 HTML 如下所示:
<iframe id="test_frame" frameSpacing="0" height="100" src="javascript:window['contents']" width="100" name="test_frame">
<!DOCTYPE html>
<html>
<head>
<title>test_frame</title>
<base target=_top>
</head>
<body style="margin: 0px; padding: 0px">
<p>Hello World</p>
</body>
</html>
</iframe>
然后我运行以下命令以访问 iframe 中的标记<body>
:
alert(window.frames["test_frame"].document.body.innerHTML);
body
Internet Explorer 6-10 失败,因为null
. iframe的document
对象存在,但似乎没有可读属性。其他浏览器只显示字符串<p>Hello World</p>
。
但有趣的是,以下适用于 IE 6-10 和所有其他浏览器:
window.setTimeout(function(){
alert(window.frames["test_frame"].document.body.innerHTML);
}, 1);
据我所知setTimeout
,在全局范围内执行传递的函数。所以我尝试使用call但它不起作用:
(function(){
alert(window.frames["test_frame"].document.body.innerHTML);
}).call(window);
我见过类似的情况,在 setTimeout 中包装代码可以解决 IE iframe 问题。IE 背后的机制或逻辑是什么?有适当的解决方法吗?
上面的测试是在标准模式下运行的,除了所述的错误之外没有其他错误。