iframe的contentDocument属性

12

"contentDocument"对于iframe(甚至是旧的“frame”元素)表示什么?它是否等同于“html”元素或“body”元素? 它有什么用途? 并且这个属性在所有浏览器中都受支持吗?

3个回答

19

w3.org

contentDocument是只读的Document类型属性,自DOM Level 2引入。如果有可用的话,它将返回该框架包含的文档,否则返回null。

MDN

从DOM iframe元素中,脚本可以通过contentWindow属性访问所包含HTML页面的窗口对象。contentDocument属性指的是iframe内部的文档元素(相当于contentWindow.document),但在IE8之前的版本中不支持该属性。

msdn

此页面或框架包含的文档
此属性在Windows Internet Explorer 8中新增。

因此,要获取body元素的innerHTML,可以使用以下代码:

iframe.contentDocument.getElementsByTagName("body")[0]

或者

iframe.contentDocument.body

在今天的浏览器中。


1
关于contentWindow的支持呢?它是从何时开始的,是否已经成为标准了呢? - Olga
谢谢,但是 w3.org 页面没有 contentWindow 的匹配项,只有 contentDocument。我想知道 contentWindow 有多标准。 - Olga

12

contentDocument是获取iframe或frame的Document对象的标准方法。它与在iframe内运行的JavaScript通过document访问的对象相同。

如其他答案所述,IE直到8版本才支持该方法,但支持通过contentWindow访问iframe的Window对象。因此,一个跨浏览器获取iframe的<body>元素的方法是:

var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
var iframeBody = iframeDoc.body;

请注意,如果iframe不是从与主文档相同的域名中提供的,则浏览器安全限制将防止以此或任何其他方式访问其文档对象。


3

contentDocument代表iframe(DOM对象)的文档。它不等同于html,因为文档有自己的属性,但是如果您键入:

myFrame.contentDocument.body 

您将获得主体本身。 所有浏览器都支持它,只需进行微小的修改:对于Internet Explorer,请使用
myFrame.contentWindow.document

享受吧,Nili


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接