var newDoc = document.implementation.createHTMLDocument('someTitle');
// swap newDoc with document
DOMImplementation.createHTMLDocument
如何在窗口中替换文档?
- 是否可以交换当前文档的一个新的文件?
- 有没有合理的理由这样做?
var newDoc = document.implementation.createHTMLDocument('someTitle');
// swap newDoc with document
DOMImplementation.createHTMLDocument
如何在窗口中替换文档?
您不能用createHTMLDocument
方法创建的Document
对象替换当前文档对象或任何文档对象。
createHTMLDocument
首次出现在DOM Level 2 Core
的其中一个草案中,但后来从最终建议中删除。
它后来被添加到HTML5规范中,因为没有编程方式来创建HTML文档。
一些规定的程序建立一个HTML文档的使用情况是,
创建一个非渲染HTML文档通过XMLHttpRequest(而不是 发送XML文档)上传。
功能测试库代码中的HTML DOM,保证 避免对显示的文档产生副作用。
从富文本编辑区创建一个孤立的非再现的文档,所以 客户端清理可以在不扰乱现场 DOM,用户仍然可以进一步编辑在上传之前完成。
在JavaScript中实现HTML5客户端解析算法,用于测试和 比较或虚拟化或基于对象功能的安全性。
隐形iframe可以用于这些目的中的大多数,但是在资源方面更多的是 。 W3C mailing list
上带来了方法放回规范W3C邮件列表的谈话,[Bug 7842] New: No programmatic way to make an HTML document - consider adding createHTMLDocument
如果您序列化到HTML中你可以替换当前页面的文档的文档document.open
,document.write
和document.close
。
实际上,您甚至可以通过添加<!doctype html>
将怪癖模式更改为标准模式。
<html>
<script>
alert('now in compatMode '+document.compatMode);
if (document.compatMode==='BackCompat') {
setTimeout(function() {
var markup= '<!DOCTYPE html>New Page';
document.open();
document.write(markup);
document.close();
}, 0);
}
</script>
</html>
我不会建议使用它这种挂羊头卖狗肉没有特殊的情况,但它确实工作。
来源:Javascript switch from quirksmode to standard + Need help with: jquery prepend doctype to html
有东西在document
那是不是真的涉及到DOM树包含, 如document.cookie
,location
和URL
。如果我们不能替换像window
和document
这样的全局对象,这会更安全。
但你在找什么可以通过更换主document
的documentElement
与其他document
的documentElement
有效地实现。 它将拥有正是你正在寻找同样的效果。*
document.replaceChild(
document.importNode(newdoc.documentElement, true),
document.documentElement
);
至于原因,做到这一点,我迄今发现不能用一个iframe来实现one。
* 注意,如果文档类型是不同的,你必须单独更换与其他文档的DOCTYPE节点的主文档的DOCTYPE 节点。
你可能不能。 'window.document'本身是只读的,'window'上没有方法来改变它的链接'document'。然而,我找不到任何资料来证明我的假设。 – copy 2011-12-31 18:58:44
我以为一样,但可能有些东西在那里。我的意思是,如果你不能将它注入到窗口中,那么创建一个新文档就意味着什么。也许你可以注入一个新的窗口/ iframe – Raynos 2011-12-31 19:22:00
是的,你可以注入到一个iframe,这是[MDN的例子](https://developer.mozilla.org/en/DOM/DOMImplementation.createHTMLDocument)createHTMLDocument( __Update__:虽然不是直接的,但是你可以用'importNode'和'replaceChild(importedDocumentElement,document.documentElement)'''来玩。它也可以用来解析你从一个http请求获得的HTML(然后有一个DOM表示)。 – copy 2011-12-31 19:42:35