代码之家  ›  专栏  ›  技术社区  ›  mck89

在iframe上使用javascript时,Firefox会出现奇怪的行为

  •  2
  • mck89  · 技术社区  · 14 年前

        <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的主体。

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

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

    附言:那些 window.setTimeout

    2 回复  |  直到 14 年前
        1
  •  5
  •   Castrohenge    14 年前

    您需要在超时时间内包装iframe文档的检索。

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

    看到了吗 http://jsfiddle.net/xeGSe/1/

        2
  •  4
  •   roryf    14 年前

    看来是时间问题 setTimeout 电话不接。你最好使用 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);
    }