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