在IE10上无法获得相同的原始iframe体?

时间:2013-02-19 21:00:20

标签: html iframe internet-explorer-10 specifications

我已经创建了一个包含空iframe的页面。然后,我可以选择iframe文档并导航到它的正文:

var iframe = document.getElementsByTagName('iframe')[0];
var doc = iframe.contentDocument || iframe.contentWindow.document;
var body = doc.body;
console.log("Body is", body);

在firefox和chrome中,这给了我身体对象。在IE10中它给我null。

Here is a Jsbin demonstrating the issue.打开JS,Console,Output面板,然后单击“Run With JS”。

两个问题:

  1. 如何以跨浏览器的方式访问iframe的正文?
  2. 哪个是正确的“规范”行为?

3 个答案:

答案 0 :(得分:6)

我今天早些时候遇到过类似的问题。似乎IE,至少9和10,没有正确创建iframe体(当我使用开发人员工具时,我能够在iframe中看到一个body标签,但就像你无法调用它一样),当没有指定的src。它给你null因为它不存在。

答案是,是否有跨浏览器方式来访问iframe的正文,是不是。但是,你可以使用一种解决方法。首先,检查iframe主体是否存在,如果不存在,则创建它。

您的代码如下所示:

var iframe = document.getElementsByTagName('iframe')[0];
var doc = iframe.contentDocument || iframe.contentWindow.document;

// The workaround
if (doc.body == null) {       // null in IE
    doc.write("<body></body>");
}

var body = doc.body;
console.log("Body is", body);

来源:http://forums.asp.net/t/1686774.aspx/1

答案 1 :(得分:0)

此代码适用于跨浏览器:

var doc=ifr.contentWindow||ifr.contentDocument;
if (doc.document) doc=doc.document;
var body=doc.getElementByTagName("body")[0];

答案 2 :(得分:0)

一年后但我相信解决方案是打电话

doc.open()
//make any modifications
doc.close()
//at this point doc.body will not be null

这使得事物以相当一致的方式跨浏览器工作