Firefox在iframe上使用javascript时的奇怪行为

Firefox在iframe上使用javascript时的奇怪行为,javascript,firefox,iframe,behavior,Javascript,Firefox,Iframe,Behavior,我在Firefox中遇到了一个奇怪的行为,这个简单的脚本: <html> <head> <script type="text/javascript"> window.setTimeout(function(){ var ifr=document.createElement("iframe"); ifr.src="about:blank";

我在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>

setTimeout(函数(){
var ifr=document.createElement(“iframe”);
ifr.src=“关于:空白”;
文件.正文.附件(ifr);
var doc=ifr.contentDocument | | ifr.contentWindow.document,
div=doc.createElement(“div”);
div.innerHTML=“测试”;
setTimeout(函数(){
文件正文附件(分部);
},500);
},500);
这段代码创建一个空白的iframe并将其附加到当前页面的主体中,然后创建一个包含简单文本的div元素并将其附加到iframe的主体中

在每个浏览器(如Safari、Chrome、Opera)中都可以使用,但在Firefox(我使用的是3.6.3版)中,div不会出现在iframe中,也不会抛出错误

我想一定有什么愚蠢的错误,但我找不到,你知道吗


PS:那些
窗口。setTimeout
只是确保dom加载到页面和iframe中的一种简单方法。

您需要在超时中包装对iframe文档的检索

        window.setTimeout(function(){
            var doc=ifr.contentWindow.document || ifr.contentDocument;
            var div=doc.createElement("div");
            div.innerHTML="test";
            doc.body.appendChild(div);
        },500);

请参阅看起来像是
设置超时
调用无法捕获的计时问题。最好使用
onload
事件来确保元素真正可用(
DOMReady
会更好,但在IE中没有那么容易)。试试这个:

document.body.onload = function() {
    var iframe = document.createElement("iframe");
    iframe.src = "about:blank";
    iframe.onload = function() {
        var doc = iframe.contentDocument || iframe.contentWindow.document,
            div = doc.createElement("div");
        div.innerHTML="test";
        doc.body.appendChild(div);
    }
    document.body.appendChild(iframe);
}

我知道有一个简单的解释:)谢谢,这工作得很好。这不是一个解释,这是一个核心问题的解决办法,它不能完全解决。我确实尝试过使用jQuery重写它,但仍然必须使用超时。任何想法-?这不是解决问题的方式,你应该使用@roryf solution