ContentDocument для iframe

Что именно представляет "contentDocument" для iframe (или даже старого элемента "frame" )? Это эквивалентно элементу "html" или "body"? Что это такое? И поддерживается ли это свойство во всех браузерах?

Ответы

Ответ 1

w3.org

contentDocument of type Документ, только для чтения, введенный в DOM Level 2     Документ этого фрейма содержит, если он есть, и он доступен, или null в противном случае.

MDN

Из элемента DOM iframe скрипты могут получить доступ к объекту окна включенной HTML-страницы через свойство contentWindow. Свойство contentDocument ссылается на элемент документа внутри iframe (это эквивалентно contentWindow.document), но не поддерживается версиями Internet Explorer до IE8.

msdn

документ на этой странице или в рамке содержит Это свойство новое в Windows Internet Explorer 8

Итак, чтобы получить innerHTML элемента body, вы можете использовать

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

или

iframe.contentDocument.body

в современных браузерах.

Ответ 2

contentDocument - стандартизированный способ получить объект iframe или frame Document. Это тот же объект, что и JavaScript, работающий в iframe, будет доступен через Document.

Как отмечалось в других ответах, IE не поддерживал его до версии 8, но поддерживал доступ к объекту iframe Window через contentWindow. Таким образом, кросс-браузерный способ получения элемента 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

Наслаждайтесь, Нили