这是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。如果有人能向我解释这一点,你确实让我成为一个非常幸福的人。