2008-09-26 2 views
17

Кто-нибудь знает, как получить HTML из-за IFRAME я попробовал несколько различных способов:Javascript Iframe innerHTML

document.getElementById('iframe01').contentDocument.body.innerHTML 
document.frames['iframe01'].document.body.innerHTML 
document.getElementById('iframe01').contentWindow.document.body.innerHTML 

и т.д.

+1

Для кого-то, кто приземляется здесь от поиска Google, в Firefox, по крайней мере, возможно, также попробовать `theiFrameObject.contentDocument.body.innerHTML`. – 2010-07-09 19:15:41

+1

@ Решение MattBlaine работает, но iframe src должен находиться в том же домене, что и в главном окне. В противном случае iframe должен будет передать свое окно родительскому элементу при загрузке `parent.ifw = window`, а затем родитель может использовать` window.ifw.document` – 2012-03-31 15:59:38

ответ

8

Если вы посмотрите на JQuery, вы можете сделать что-то вроде :

<iframe id="my_iframe" ...></iframe> 

$('#my_iframe').contents().find('html').html(); 

Это при условии, что ваш IFrame родитель и ребенок находятся на том же сервере, благодаря Same Origin Policy в JavaScript.

+2

Вы захватываете innerHTML элемента html, а не тело, и это довольно обратный метод для этого. Когда есть собственные свойства DOM для получения того, что вы хотите (например, .body), вам следует избегать накладных расходов на вызов find. – Prestaul 2008-09-26 13:13:24

+0

+1 это работает во всех основных браузерах – ravi404 2012-12-12 15:53:32

+13

Прекратите использовать jQuery в качестве ответа, пожалуйста! – 2013-05-13 12:44:28

13

Я думаю, что это то, что вы хотите:

window.frames['iframe01'].document.body.innerHTML 

EDIT:

Я его на хорошей власти, что это не будет работать в Chrome и Firefox, хотя он отлично работает в IE, где я его протестировал. Оглядываясь назад, это была большая ошибка

Это будет работать:

window.frames[0].document.body.innerHTML 

Я понимаю, что это не совсем то, что было предложено, но не хотите, чтобы удалить ответ, потому что я думаю, что это имеет место ,

Мне нравится ответ jquery @ ravz ниже.

3

Не забывайте, что вы не можете перекрещивать домены из-за безопасности.

Так что, если это так, вы должны использовать JSON.

10

Что-то вроде следующего будет работать.

<iframe id = "testframe" onload = populateIframe(this.id);></iframe> 

// The following function should be inside a script tag 

function populateIframe(id) { 

    var text = "This is a Test" 
var iframe = document.getElementById(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else { 
    doc = iframe.contentWindow.document; 
} 

doc.body.innerHTML = text; 

    } 
2

С этой целью вы можете использовать свойство contentDocument или contentWindow. Вот пример кода.

function gethtml() 
{ 
var x=document.getElementById("myframe"); 
var y=(x.contentWindow || x.contentDocument); 
if (y.document)y=y.document; 
alert(y.body.innerHTML); 
} 

здесь, мой кадр является идентификатором вашего iframe. Примечание. Вы не можете извлечь содержимое из iframe из src вне домена.

6

Ответ Конрой был прав. В случае, если требуется только материал из тела тега, просто используйте:

$('#my_iframe').contents().find('body').html(); 
1

Вы можете получить исходный код из другого домена, если вы установите фильтр ForceCORS на Firefox. Когда вы включите этот фильтр, он обходит функцию безопасности в браузере, и ваш скрипт будет работать, даже если вы попытаетесь прочитать другую веб-страницу. Например, вы можете открыть FoxNews.com в iframe, а затем прочитать его источник. Причина, по которой современные веб-дизайнеры отрицают эту способность по умолчанию, состоит в том, что, если в другой домен включен фрагмент JavaScript, и вы читаете это и отображаете его на своей странице, он может содержать вредоносный код и представлять угрозу безопасности. Таким образом, всякий раз, когда вы показываете данные из другого домена на своей странице, вы должны остерегаться этой реальной угрозы и реализовать способ отфильтровать весь код JavaScript из вашего текста, прежде чем вы собираетесь его отображать.Помните, что если предполагаемый фрагмент исходного текста содержит некоторый код, заключенный в теги скриптов, они не будут отображаться, когда вы покажете его на своей странице, тем не менее они будут работать! Итак, осознайте, что это угроза.

http://www-jo.se/f.pfleger/forcecors

Смежные вопросы