2011-10-15 153 views
1

This question沒有收到任何滿意的答案,所以我再次問。如何替換iframe的全部內容?

我可以讓我的iframe這樣的:

var iframe = document.getElementById('preview'); 
var win = iframe.contentWindow; 
var doc = win.document; 

而寫一些像這樣的初始HTML它:

doc.write('<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" href="reset.css"></head><body>blah blah</body></html>'); 

這偉大工程,但現在我想更換整個事情與一些新的內容。我怎樣才能做到這一點?

要說清楚,「整件事」我的意思是<head>。我需要鏈接一些外部的JS和CSS。

優選地,這也包括<!DOCTYPE>,但在這一點上它不是必需的。

+0

@RobG:其實沒有。這裏發佈的兩個答案與那裏發佈的答案完全不同,並且他們實際上工作。我爲什麼期望有不同的東西?因爲發佈最後一個問題已經過去了半年,並且這裏有一個新的用戶羣,並且因爲我無法有效地解決一箇舊問題。 – mpen

+0

@RobG:另外,Esailija發佈了一些我不知道的提示,也沒有出現在其他答案中。 – mpen

+0

讓你的問題與同一時間發佈的非常類似的問題混淆。 – RobG

回答

2

您可以簡單地從DOM中刪除舊的iframe節點,並創建一個包含新內容的新節點。

+0

是的,理論上我可以替換整個iframe,但是替換iframe的文檔不是更有效嗎?有可能這樣做嗎? – mpen

+1

將'doc.documentElement.outerHTML'設置爲某些東西會給出'message:「NO_MODIFICATION_ALLOWED_ERR:DOM Exception 7」',所以不能替換整個文檔,但是可以使用''元素以下的任何東西(''和'' ) – Esailija

+0

@Esailija:很高興知道!在你的幫助下,我想我已經擁有了我現在需要知道的一切! :)我相信這使Darin的解決方案成爲最有效的答案。 – mpen

1

我相信使用的innerHTML應該工作:

doc.documentElement.innerHTML = "<script src='blah.js'></script><style></style>" 
+0

啊......這就解釋了爲什麼我的嘗試不起作用。必須在'documentElement'上做!這似乎工作,但我不能用這種方法設置'',我可以嗎?基本上這取代了''的*內容*不是? – mpen

+1

''元素本身不可修改,但文檔具有屬性'iframe.contentWindow.document.doctype',其屬性如'doc.doctype.systemId'。屬性是隻讀的,因此可能不建議嘗試動態更改文檔類型 – Esailija