无法在Firefox中设置IFrame的document.body.innerHTML

Tim*_*ler 7 html iframe firefox innerhtml

我已经找到了一种跨浏览器的方式来以编程方式设置IFrame的innerHTML.(如http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for-both-ie-and-firefox/) .我已经编写了一些示例代码(如下所示),我可以在Safari和Chrome中使用它,但不能使用Firefox.任何人都可以帮我弄清楚我需要做什么(以便携方式)?

<html>
<body>

<div name=FRAME2div id=FRAME2div style="position:absolute; background-color:blue; color:black; border-color:black;border-width:0; left:100px; top:40px; width:200px; height:200px; overflow:scroll; display:block; " >
</div>

<script type="text/javascript">
document.getElementById("FRAME2div").innerHTML = '<iframe border=0 id=IFRAME2 name=IFRAME2 ></iframe>';
document.getElementById("IFRAME2").contentWindow.document.body.innerHTML = '<html><body><p>NETSCAPE</p></body></html>';
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Bor*_*sky 14

您正在设置innerHTML,而about:blankiframe正在进行加载.完成加载后,它将替换您修改的文档.

如果您对iframe的onload进行修改,它将适用于所有浏览器.


Rob*_*b W 9

在Firefox中,当没有设置初始内容时,框架的内容似乎无法识别.解决此问题的最简单方法如下面的代码所示:

//Note: ID is not necessary for this example
document.getElementById("FRAME2div").innerHTML = '<iframe id=IFRAME2 name=IFRAME2 ></iframe>';
var doc = frames["IFRAME2"].document;

//Trigger a page "load".
doc.open();
doc.close();
//Set innerHTML of the body tag.
doc.body.innerHTML = '<p>NETSCAPE</p>';
Run Code Online (Sandbox Code Playgroud)

另一种方法包括将src属性设置为javascript:"&nbsp;",并注册一次性加载事件处理程序.这种方法稍微复杂一些,因此我没有详细描述它.


可以frame通过名称按对象访问每个框架的窗口对象.

所以,我建议使用以下代码:

frames['IFRAME2'].document.documentElement.innerHTML = "<body>...</body>";
Run Code Online (Sandbox Code Playgroud)

document.documentElement通常是指文档的根元素<html>.当您调用当前代码时,可能还没有准备好body属性document.通过引用根元素,可以避免这个问题.