2016-12-16 66 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 –