在 iframe 上使用 javascript 时 Firefox 的奇怪行为
我在 Firefox 中使用这个简单的脚本遇到了一个奇怪的行为:
<html>
<head>
<script type="text/javascript">
window.setTimeout(function(){
var ifr=document.createElement("iframe");
ifr.src="about:blank";
document.body.appendChild(ifr);
var doc=ifr.contentDocument || ifr.contentWindow.document,
div=doc.createElement("div");
div.innerHTML="test";
window.setTimeout(function(){
doc.body.appendChild(div);
},500);
},500);
</script>
</head>
</html>
这段代码创建一个空白 iframe 并将其附加到当前页面的正文,然后创建一个包含简单文本的 div 元素并将其附加到正文iframe 的。
在每个浏览器(IE、Safari、Chrome、Opera)中它都可以工作,但在 Firefox(我使用的是版本 3.6.3)中,div 不会出现在 iframe 内,也不会引发错误。
我认为某个地方一定有一些愚蠢的错误,但我找不到它,你有什么想法吗?
PS:这些 window.setTimeout
只是确保 dom 加载到页面和 iframe 中的简单方法。
i've met a strange behaviour in Firefox with this simple script:
<html>
<head>
<script type="text/javascript">
window.setTimeout(function(){
var ifr=document.createElement("iframe");
ifr.src="about:blank";
document.body.appendChild(ifr);
var doc=ifr.contentDocument || ifr.contentWindow.document,
div=doc.createElement("div");
div.innerHTML="test";
window.setTimeout(function(){
doc.body.appendChild(div);
},500);
},500);
</script>
</head>
</html>
This piece of code creates a blank iframe and appends it to the body of the current page, then it creates a div element that contains a simple text and appends it to the body of the iframe.
In every browser (IE, Safari, Chrome, Opera) it works, but in Firefox (i'm using the version 3.6.3) the div does not appear inside the iframe and no error is thrown.
I think that there must be some stupid error somewhere but i can't find it, have you got some idea?
PS: those window.setTimeout
are just a simple way to make sure that the dom is loaded in the page and in the iframe.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要将 iframe 文档的检索包含在超时中。
请参阅http://jsfiddle.net/xeGSe/1/
You need to wrap the retrieval of the iframe doc in the timeout.
See http://jsfiddle.net/xeGSe/1/
看起来您的
setTimeout
调用未捕获计时问题。您最好使用onload
事件来确保元素真正可用(DOMReady
会更好,但在 IE 中并不那么容易)。试试这个:Looks like a timing issue that your
setTimeout
calls aren't catching. Your better off usingonload
events to ensure elements are truly available (DOMReady
would be better but not as easy in IE). Try this: