gpt4 book ai didi

javascript - createHTMLDocument() 未初始化

转载 作者:行者123 更新时间:2023-11-28 00:40:30 24 4
gpt4 key购买 nike

我是 JavaScript 和 HTML5 新手,今天我在使用 createHTMLDocument() 时遇到了一个令人沮丧的问题。我从 Mozilla's site 得到以下片段:

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

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);
}
</script>
<body>
<p>Click <a href="javascript:makeDocument()">here</a> to create a new document and insert it below.</p>
<iframe id="theFrame" src="about:blank" />
</body>

它按预期工作。文本将放入文档中,并将预期的就绪状态“完成”写入控制台。

但后来我重新调整了代码,以便 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>

但是当运行时,文本不会添加到文档中,并且文档的就绪状态为“未初始化”。我确信我犯了一些愚蠢的错误。有什么想法吗?

最佳答案

如果您想调用操作 DOM 的 JavaScript 函数,您应该使用 onload 事件处理程序。

尝试添加

<body onload="makeDocument()">

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

浏览器是多线程的,因此即使脚本标记位于 iframe 定义之后,您也无法保证 DOM 已完成加载。

关于javascript - createHTMLDocument() 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com