Проблема iframe с использованием JavaScript - PullRequest
3 голосов
/ 28 января 2010

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

document.getElementById('iframe01').contentDocument.body.innerHTML, document.frames['iframe01'].document.body.innerHTML, document.getElementById('iframe01').contentWindow.document.body.innerHTML и т. Д.

но никто из них не работал.

Я считаю, что причина, по которой они не работают, заключается в том, что содержимое моего iframe не имеет тега body (я загружаю XML). Есть ли другой способ получить все содержимое iframe? Я тоже открыт для jQuery.

Это:

document.getElementById('iframe01').contentWindow.document.body.innerHTML

отлично работает в IE, но это:

document.getElementById('iframe01').contentDocument.body.innerHTML

не работает для FF.

Ответы [ 2 ]

2 голосов
/ 28 января 2010

Поскольку вы пометили этот jQuery, я полагаю, что вы хотели бы получить ответ в jQuery, чтобы обойти проблемы, связанные с кросс-браузерными операциями.

$("#iframe01").contents()

приведет вас к объекту jQuery для содержимого iframe. Вы можете работать оттуда. Проблемы с безопасностью могут помешать вам получить фактическое содержимое HTML (вы получите сообщение об ошибке, например «отказано в разрешении на получение свойства htmldocument»).

Полный пример кода:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(function() {
    $("#clickme").click(function() {
      alert($("#iframe01").contents().find("body").html());
      return false;
    });     
});
</script>
</head>
<body>
  <p id="hello">Hello World, there's an iframe below this. <a href="#" id="clickme">Click me!</a></p>
  <iframe id="iframe01" src="iframe_content.html"></iframe>
</body>
</html>

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

0 голосов
/ 28 января 2010

У меня была похожая проблема некоторое время назад. Попробуйте использовать:

document.frames["iframe0"].contentWindow.document.body.innerHTML

Это должно работать как для IE, так и для FF

...