如何在窗口中替换文档?

时间:2011-12-31 17:48:59

标签: javascript dom document

var newDoc = document.implementation.createHTMLDocument('someTitle');
// swap newDoc with document

DOMImplementation.createHTMLDocument

  • 是否可以将当前文档换成新文档?
  • 有没有合理的理由这样做?

3 个答案:

答案 0 :(得分:5)

您无法使用Document方法创建的createHTMLDocument对象替换当前文档对象或任何文档对象。

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

答案 1 :(得分:2)

document中的内容与它包含的DOM树并不真正相关, 例如document.cookielocationURL。如果我们无法替换windowdocument等全局对象,那就更安全了。

但是,您可以通过将document的主要documentElement替换为其他document的{​​{1}}来有效地实现您所寻求的目标。 它将与您正在寻找的效果完全相同。*

documentElement

至于理由,到目前为止我发现使用iframe无法实现one

* 请注意,如果doctypes不同,则必须替换主文档的doctype 节点与另一个文档的doctype节点分开。

答案 2 :(得分:1)

如果您将文档序列化为HTML,则可以使用document.opendocument.writedocument.close替换当前页面的文档。

实际上,您甚至可以通过添加<!doctype html>来将Quirks模式更改为标准模式。

例如:http://jsbin.com/anusul/2

<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