Javascript createHTMLDocument()未初始化

Javascript createHTMLDocument()未初始化,javascript,html,Javascript,Html,我不熟悉JavaScript和HTML5,今天我在玩createHTMLDocument()时遇到了一个令人沮丧的问题。我从中获得了以下片段: 但是当运行该程序时,文本不会添加到文档中,文档的readyState是“未初始化的”。我肯定我犯了一些愚蠢的错误。有什么想法吗?如果你想调用一个javascript函数来处理DOM,你应该使用一个onload事件处理程序 尝试添加 <body onload="makeDocument()"> 而不是直接在脚本标记中调用函数 浏览器是多线

我不熟悉JavaScript和HTML5,今天我在玩createHTMLDocument()时遇到了一个令人沮丧的问题。我从中获得了以下片段:


但是当运行该程序时,文本不会添加到文档中,文档的readyState是“未初始化的”。我肯定我犯了一些愚蠢的错误。有什么想法吗?

如果你想调用一个javascript函数来处理DOM,你应该使用一个onload事件处理程序

尝试添加

<body onload="makeDocument()">

而不是直接在脚本标记中调用函数


浏览器是多线程的,因此即使脚本标记在iframe定义之后,也不能保证DOM加载完成。

Yup,就是这样。谢谢虽然我还是很困惑。我还尝试了
window.onload=makeDocument()
似乎应该可以工作(但没有),因为上面说的是
窗口。只有在所有对象都在DOM中并且所有其他资源都已加载后,才会启动onload
。很抱歉,花了几天时间在周末与您联系。您的window.onload=makeDocument()的原因;语句失败是因为通过插入括号,您告诉Javascript立即调用函数,然后将返回值分配给onload。您真正想要做的是将函数本身分配给onload,当事件触发时将调用您的函数,如下所示:window.onload=makeDocument;谢谢你接受我的回答,如果你有机会,也请投上一票!谢谢你回来。我针对这个问题提出了第二个问题,其他人回答了。回想起来,这是显而易见的。我现在还不能推翻你的答案。但我会尽快得到足够的分数。
<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.";

    try {
      doc.body.appendChild(p);
  } catch(e) {
      console.log(e);
    }

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

    destDocument.replaceChild(newNode, destDocument.documentElement);
    console.log(destDocument.readyState);
  }

  makeDocument();
</script>
<body onload="makeDocument()">