【发布时间】:2013-01-11 21:57:01
【问题描述】:
我创建了一个friendly 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);
对于 Internet Explorer 6-10 失败,因为 body 是 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 背后的机制或逻辑是什么?是否有适当的解决方法?
以上测试是在标准模式下运行的,除了所述之外没有其他错误。
【问题讨论】:
-
什么时候调用这个方法?内容可能尚未加载。
标签: javascript internet-explorer iframe