2016-12-16 67 views
2

整个文档这不是因为这些原因重复的问题:如何覆盖用JavaScript

  • 我询问如何使用JavaScript替换整个HTML文档格式的jQuery或其他任何花哨的扩展JavaScript的。其他一些类似于这个问题的问题涉及到AJAX或jQuery等特定的事物。
  • 我不是问为什么document.write()只附加到页面。也许我正在寻找的纯粹的JavaScript解决方案可能会包含该功能,但它不仅可以,因为它本身不足。

我正在做的是覆盖一个网页,因为它只在HTML浏览器中显示。函数document.write()仅将传递给它的参数附加到文档的主体。属性document.documentElement.outerHTML可以从中读取,但不像在页面的子元素上使用它时,不能写入,并且即使可以,也会保持DOCTYPE不变。

我正在写一个书签,所以这个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> 

我该如何实现这种覆盖文档?

+0

从我所看到的唯一方法就是修改每个部分。我会建议或许考虑重构你的代码。 – Jhecht

回答

0

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

var newDoctype = document.implementation.createDocumentType('html','-//W3C//DTD XHTML 1.0 Transitional//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 = '<title>Example</title>'; 
 
    doc.getElementsByTagName('body')[0].innerHTML = '<p>This is an example.</p>';
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    </head> 
 
    <body> 
 
    </body> 
 
</html>

编辑:

更新以包括Xweque和xmlns属性的意见。

+0

没有。这不能用来重写整个文档。首先,它保持DOCTYPE不变。 – Melab

+0

为什么你需要重写文档类型? – mhatch

+0

http://stackoverflow.com/questions/3147750/how-can-i-change-the-doctype –