Для одного из моих проектов расширения Chrome я извлек HTML-содержимое другой веб-страницы в теге <iframe> текущей веб-страницы, динамически заполнив ее атрибут src. Теперь я хочу извлечь несколько значений из тега <iframe>. Но jQuery всегда показывает этот тег <iframe> как пустой. Причина, по которой я использую, заключается в том, что внутри извлеченной страницы есть несколько файлов JavaScript, которые я хочу запустить, прежде чем я начну парсинг. Я также пытался установить таймеры ожидания, но jQuery всегда показывает, что тег <iframe> пустой (хотя атрибут src установлен).
В ходе расследования я обнаружил, что <iframe> имеет внутри странное значение #document, за которым следуют обычные HTML-теги. Интересно, является ли это причиной того, что jQuery не может рекурсивно проходить через иерархию DOM внутри тега <iframe>.
См. Ниже снимок экрана с изображением желаемого тега <iframe> "проверить".
Кроме того, основная веб-страница, на которой существует тег <iframe>, находится на том же веб-сайте, что и URL-адрес страницы новой выборки (хотя и в другом субдомене). И я не получаю никаких предупреждений о разрешении доступа в Chrome, поэтому я не подозреваю, что это проблема междоменного доступа.
Редактировать:
Даже через 10 секунд подождите:
console.info($("#insertHere").text());
возвращается пустым. А также,
console.info($("#insertHere").parent().html());
возвращает: <iframe id = "insertHere" src = "/courses/intro..." style = "width:0;height:0;border:0; border:none;"></iframe>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете получить содержимое iframe с помощью такого кода:
$('#insertHere').contents().find("html").html();
$('#insertHere').contents().find("#MathJax_Message").text();
Если iframe находится в другом домене (похоже, не в вашем случае), защита вашего браузера от межсайтового скриптинга (XSS) заблокирует его.
Можете ли вы провести тест и посмотреть, есть ли у iframe доступ к главной родительской странице (если у вас есть контроль на загружаемой странице iframe)?
В противном случае есть хороший способ связать 2 страницы с разных доменов: вы можете использовать онлайн-сервисы, такие как "толкатель", который установит канал между страницами ... здесь вы вообще ограничены доменами / поддоменами. Я могу дать вам рабочий код, если вас это интересует. Очевидно, вам нужно иметь возможность добавлять код толкателя в содержимое iframe, которое вы хотите очистить.
Я попытался получить доступ к родительской странице из iframe и получил следующую ошибку: «SecurityError: заблокировал фрейм с источником от доступа к фрейму с перекрестным источником». Таким образом, похоже, что субдомен того же веб-сайта рассматривается как случай с перекрестным происхождением. Я тестировал с помощью команды dig и получаю разные IP-адреса для домена и поддомена. Так что это могло быть причиной неудачи.
это звучит очень интересно. Поделитесь, пожалуйста, кодом. :)
Хорошо, я даю его вам через несколько часов (полночь во Франции ...), вы уже можете создать бесплатную учетную запись pusher.com и протестировать их консоль ..
#document - это объект документа страницы для iFrame DOM.
Попробуйте получить доступ к document iframe, например
var frame = document.getElementById('#hidden-frame');
console.info(frame.document.body);
Вы также можете попробовать использовать Скрипт содержимого и разрешить его в все страницы с <all_urls>, который должен быть загружен с содержимым iframe, и использовать его для отправки содержимого на background script с помощью обмена сообщениями.
К сожалению, $ ('# insertHere'). Contents () также пуст. И я не вижу предупреждения от Chrome о XSS. (Хотя веб-сайт, который извлекает «Сценарий содержимого» подключаемого модуля, перенаправляет на поддомен текущего веб-сайта.)