Получить DOM-содержимое междоменного iframe [дубликат]


этот вопрос уже есть ответ здесь:

  • Крест домена вопроса ифрейме 2 ответы

У меня есть iframe для междоменного сайта. Я хочу прочитать DOM iframe, который, как я полагал, был возможен, потому что с помощью инспектора я могу даже изменить DOM iframe. Однако каждый раз, когда я пытаюсь его прочитать, я сталкиваюсь с одним и тем же политика происхождения. Все, что я хочу, это содержимое, загруженное в мой локальный DOM, из iframe. Я думал, что это будет так же просто, как $(document.body).find('iframe').html(), но это возвращает пустую строку.

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

спасибо

5 55

5 ответов:

ты не можешь. защита XSS. Содержимое кросс-сайта не может быть прочитано javascript. Ни один крупный браузер не позволит вам этого. Мне жаль, но это недостаток дизайна, вы должны отказаться от этой идеи.

EDIT

обратите внимание, что если у вас есть доступ к редактированию веб-сайта, загруженного в iframe, вы можете использовать postMessage (см. совместимость с браузерами)

есть простой способ.

  1. вы создаете iframe, которые имеют для источника что-то вроде "http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/unicorn

  2. затем вы просто получаете этот url с $_GET и отображаете содержимое с помощью file_get_contents($_GET ['url']);

вы получите iframe, который имеет домен такой же, как у вас, тогда вы сможете использовать $("фрейм.)"оглавление.)(найти ("тело"), чтобы манипулировать содержимым.

Если у вас есть доступ к странице iframed, вы можете использовать что-то вроде easyXDM для выполнения вызовов функций в iframe и возврата данных.

Если у вас нет доступа к странице iframed, вам придется использовать серверное решение. С PHP вы можете сделать что-то быстрое и грязное, как:

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 

Если у вас есть доступ к этому домену/iframe, который загружается, то вы можете использовать окно.postMessage для связи между iframe и главным окном.

прочитайте DOM с JavaScript в iframe и отправьте его через postMessage в верхнее окно.

дополнительная информация здесь:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

есть обходной путь для его достижения.

  1. во-первых, привязать iframe к целевой странице с относительным url. Браузеры будут обрабатывать сайт в iframe тот же домен, что и ваш сайт.

  2. на вашем веб-сервере, используя модуль перезаписи для перенаправления запроса с относительного url на абсолютный url. Если вы используете IIS, я рекомендую вам проверить на модуль IIRF.