如何用JavaScript覆盖整个文档

如何用JavaScript覆盖整个文档,javascript,html,Javascript,Html,这不是一个重复的问题,原因如下: 我想问的是如何用JavaScript替换整个HTML文档,而不使用jQuery或任何其他对JavaScript的奇特扩展。与此问题类似的其他一些问题涉及AJAX或jQuery等特定问题 我不是在问为什么document.write()只附加到页面上。也许我正在寻找的纯JavaScript解决方案可能会包含该函数,但它不能仅限于此,因为它本身是不够的 我想做的是覆盖一个网页,因为它显示在浏览器中只有HTML。函数document.write()只将传递给它的任

这不是一个重复的问题,原因如下:

  • 我想问的是如何用JavaScript替换整个HTML文档,而不使用jQuery或任何其他对JavaScript的奇特扩展。与此问题类似的其他一些问题涉及AJAX或jQuery等特定问题
  • 我不是在问为什么
    document.write()
    只附加到页面上。也许我正在寻找的纯JavaScript解决方案可能会包含该函数,但它不能仅限于此,因为它本身是不够的
我想做的是覆盖一个网页,因为它显示在浏览器中只有HTML。函数
document.write()
只将传递给它的任何参数附加到文档的正文中。属性
document.documentElement.outerHTML
可以读取,但与在页面的子元素上使用时不同,它不能写入,即使可以,也会保持DOCTYPE不变

我正在开发一个bookmarklet,所以这个JavaScript不会在页面中运行,这意味着脚本在运行时被覆盖没有问题。它也可以在浏览器的开发工具中运行

例如,假设我在浏览器中打开了
about:blank
。DOM的内容如下所示:

<html>
    <head></head>
    <body></body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Example</title>
    </head>
    <body>
        <p>This is an example.</p>
    </body>
 </html>

我希望能够用我想要的任何字符串覆盖它。例如,我可以让它看起来像这样:

<html>
    <head></head>
    <body></body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Example</title>
    </head>
    <body>
        <p>This is an example.</p>
    </body>
 </html>

例子
这是一个例子


如何实现文档的那种覆盖?

您可以使用
document.implementation.createDocumentType
重写doctype和
document.getElementsByTagName
获取DOM元素,然后使用
innerHTML
setAttribute
重写

var newDoctype=document.implementation.createDocumentType('html','-//W3C//DTD XHTML1.0//EN','http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdd');
document.doctype.parentNode.replaceChild(newDoctype,document.doctype);
document.getElementsByTagName('html')[0].setAttribute('xmlns','http://www.w3.org/1999/xhtml');
var doc=document.getElementsByTagName('html')[0];
doc.getElementsByTagName('head')[0].innerHTML='Example';
doc.getElementsByTagName('body')[0].innerHTML='这是一个示例。

'

文档。写入('Some Text')
文档。编写
重写页面的代码。

尝试以下操作:

函数一(){
document.write(“第一个html”);
document.close();//这就不同了
}
函数二(){
document.write(“第二个html”);
document.close();
}
请参阅问题中的
document.write()覆盖文档?
,在调用
文档之前会隐式调用
文档.open
。write
,但
文档.close
不会,并且
document.write()
文档关闭时=重写文档

document.write()
当文档打开时=附加到文档。

否。不能用于重写整个文档。首先,它保持DOCTYPE不变。为什么需要重写DOCTYPE?DOCTYPE是只读属性。它可以更改,但实际上不会更新文档的DOCTYPE。DOCTYPE是一个可以“更改”的文档类型,因为当您检查文档的DOCTYPE时,它将是您创建的文档类型,但不会更改浏览器呈现的内容。这可能会引起警惕,但在Chrome56和Firefox50上运行测试证实了这一点。从我所看到的唯一方法是修改每个部分。我建议您考虑重构代码。