contentDocument для фрейма - PullRequest
       13

contentDocument для фрейма

12 голосов
/ 05 июля 2011

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

Ответы [ 3 ]

19 голосов
/ 05 июля 2011

w3.org

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

MDN

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

msdn

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

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

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

или

iframe.contentDocument.body

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

12 голосов
/ 05 июля 2011

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

Как отмечалось в других ответах, IE не поддерживал его до версии 8, но поддерживал доступ к объекту iframe Window через contentWindow. Поэтому кросс-браузерный способ получить элемент iframe <body>:

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

Обратите внимание, что если iframe не обслуживается из того же домена, что и основной документ, ограничения безопасности браузера будут препятствовать доступу к его объекту документа тем или иным способом.

2 голосов
/ 05 июля 2011

contentDocument представляет документ iframe (объект DOM). Это не эквивалентно html, поскольку документы имеют свои собственные свойства, однако, если вы наберете:

myFrame.contentDocument.body 

Вы получите само тело.

Поддерживается во всех браузерах, с небольшой модификацией: для Internet Explorer используйте

myFrame.contentWindow.document

Наслаждайся, Нили

...