2011-10-15 56 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