Получить IFrame innerHTML используя JavaScript - PullRequest
4 голосов
/ 15 июня 2011

Я пытаюсь получить внутренний HTML-код IFrame, используя следующий код.

 <iframe src="http://www.msn.com" 
         width="100%" height="100%" marginwidth="0"
         scrolling="no" frameborder="0" id="divInfo" 
         onreadystatechange="MyFunction(this);"></iframe>   

Код JavaScript:

  function MyFunction(frameObj)
    {
        if (frameObj.readyState == "complete")
        {
            alert(frameObj.document.body.innerHTML); 
        }
    }

Но предупреждение показывает мне HTML-код текущего документа.Как я могу получить внутренний HTML-код iframe, когда состояние готовности frmae завершено.

Если я использую alert(frameObj.contentWindow.document.body.innerHTML);, это дает мне сообщение об отказе в доступе.

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 15 июня 2011

Доступ запрещен, ошибка вызвана той же политикой происхождения.

Поскольку ваша страница размещена на http://www.example.com/ (например), если вы попытаетесь получить доступ к деталям на http://www.msn.com/,, браузер не позволит вам этого сделать, поскольку они принадлежат 2 различным доменам.

Однако, если вы пытаетесь получить доступ к данным из того же домена - Страница хостинга: http://www.example.com/index.html, Страница IFrame: http://www.example.com/iframe.html,, тогда вы сможете получить содержимое.

Для получения дополнительной информации о той же политике происхождения, вот ссылка: http://en.wikipedia.org/wiki/Same_origin_policy

Кстати, вы можете вместо этого использовать frameObject.contentDocument

<script type="text/javascript">
function documentIsReady(frameObject) {
  alert(frameObject.contentDocument.body.innerHTML);
}
</script>

... и вы также можете использовать onload вместо onreadystatechange ...

<iframe src="iframe.html" onload="documentIsReady(this);"></iframe>
4 голосов
/ 15 июня 2011

Вы не можете прочитать содержимое <iframe>, содержимое которого находится в другом домене, чем содержимое родительской страницы.

1 голос
/ 15 июня 2011

Это можно сделать только в том случае, если он придерживается той же политики происхождения (что означает, что iframe находится на том же сервере, что и родительский документ).

В любом случае, на этот вопрос был получен ответ здесь :)

0 голосов
/ 28 октября 2013

Как было сказано ранее, вы не можете получить содержимое <iframe>, если его источник не из того же источника.

Это также относится к большинству других способов получения внешнего контента, таких как использование ajax для загрузки исходного кода с другой страницы. т.е.: $('#div').load('http://www.google.com');

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

Это означает, что контент должен быть на том же протоколе и хосте.

Статья в Википедии, связанная выше:

httpː // www.example.com / dir / page2.html -> Успех Тот же протокол и хост

httpː // www.example.com / dir2 / other.html -> Успех Тот же протокол и хост

httpː // username: password@www.example.com/dir2/other.html -> Success Тот же протокол и хост

httpː // www.example.com: 81 / dir / other.html -> Сбой Тот же протокол и хост, но разные порт

https://www.example.com/dir/other.html -> Отказ Другой протокол

http://en.example.com/dir/other.html -> Ошибка другого хоста

http://example.com/dir/other.html -> Сбой другого хоста (требуется точное соответствие)

http://v2.www.example.com/dir/other.html -> Ошибка другого хоста (требуется точное соответствие)

Проще говоря, он должен быть на том же сайте. Таким образом, хотя example.com/hello.html может загружать контент с example.com/goodbye.html, он не может загружать контент с google.com/content.html

Кроме того, он должен находиться в том же домене. Субдомены считаются аннулирующими ту же политику доменов, поэтому weebly.com/hello.html может загружать контент с weebly.com/goodbye.html, но не может загружать контент с user1.weebly.com/content.html

Конечно, есть обходные пути, как обычно, , но это совсем другая история. На самом деле, это весьма актуально для вопроса. Так что вот замечательная ветка вопросов о всех способах ее обхода.

...