我有这个方法,它工作正常,除了在 Firefox 中:
function write(template) {
document.open("text/html", "replace");
document.write(template);
document.close();
}
write("<!DOCTYPE html><head><title>MyPage</title></head><body>111</body><html>");
在 Firefox 中,无法再刷新整个页面,并且当您更新地址字段中的哈希时,它会强制完全刷新页面。
这不会发生在 chrome 中。
有没有一种不同的方法来更新整个文档,让 Firefox 继续运行?
谢谢!
- - - - - -编辑 - - - - -
我注意到有一个document.childNodes[0].remove()方法可以调用,它将删除旧文档,但我无法向该数组添加新的文档节点。
var node = document.createElement("html");
node.innerHTML = "<body>1111</body>";
document.childNodes[0].remove();
document.childNodes[0] = node;
似乎没有工作。有什么提示吗?
------------编辑2 ----------
function write(template) {
var node = document.createElement("html");
node.innerHTML = template;
var head = node.getElementsByTagName("head")[0];
var body = node.getElementsByTagName("body")[0];
if ( head ) {
document.documentElement.replaceChild(
head,
document.documentElement.getElementsByTagName("head")[0]
);
}
if ( body ) {
document.documentElement.replaceChild(
body,
document.documentElement.getElementsByTagName("body")[0]
);
}
}
不幸的是,这成功地替换了 dom,不像 write 它不会重新评估样式或脚本标签,使其无用:(
------- 编辑 3 -------
产生与 EDIT 2 相同的结果,使其也无用:
function write(template) {
var node = document.createElement("html");
node.innerHTML = template;
document.replaceChild(node, document.childNodes[0]);
}
----- 编辑 4 -----
请看下面我的回答