window.onload并有不同的结果。为什么?

时间:2015-01-17 17:57:46

标签: javascript html html5 dom onload

这是last question的推论,可能是this one的扩展。我正在玩createHTMLDocument(),尝试设置onload事件来触发它。以下代码(基于找到的代码here)使用内联onload并且只使用花花公子:

<div>
  <iframe id="frame" src="about:blank"> </iframe>
</div>

<script>
  function makeDocument() {
  var frame = document.getElementById("frame");

  var doc = document.implementation.createHTMLDocument("New Document");
  var p = doc.createElement("p");
  p.innerHTML = "This is a new paragraph.";
  doc.body.appendChild(p);

  var destDocument = frame.contentDocument;
  var srcNode = doc.documentElement;
  var newNode = destDocument.importNode(srcNode, true);

  destDocument.replaceChild(newNode, destDocument.documentElement);
  console.log(destDocument.readyState);
}
</script>
<body onload="makeDocument()"></body>

但是,如果我尝试使用makeDocument()加载window.onload,则在加载createHTMLDocument()所需的内容(不确定内容)之前,该函数会过早触发。这是代码(删除了一些冗余):

<div>
  <iframe id="frame" src="about:blank"> </iframe>
</div>
<script>
  function makeDocument() {
    // same as previous
  }
  window.onload = makeDocument();
</script>

如果你运行它,你会注意到不仅文本没有被添加到框架中,而且正如控制台输出所指示的那样,在window.onload被触发时无法初始化内部文档。为什么不呢?

我在various places中读到,window.onload和内联onload基本相同。但后来maybe not really。如果有人能向我解释这一点,你确实让我成为一个非常幸福的人。

0 个答案:

没有答案