Не удается очистить элементы внутри элемента #document

Для одного из моих проектов расширения Chrome я извлек HTML-содержимое другой веб-страницы в теге <iframe> текущей веб-страницы, динамически заполнив ее атрибут src. Теперь я хочу извлечь несколько значений из тега <iframe>. Но jQuery всегда показывает этот тег <iframe> как пустой. Причина, по которой я использую, заключается в том, что внутри извлеченной страницы есть несколько файлов JavaScript, которые я хочу запустить, прежде чем я начну парсинг. Я также пытался установить таймеры ожидания, но jQuery всегда показывает, что тег <iframe> пустой (хотя атрибут src установлен).

В ходе расследования я обнаружил, что <iframe> имеет внутри странное значение #document, за которым следуют обычные HTML-теги. Интересно, является ли это причиной того, что jQuery не может рекурсивно проходить через иерархию DOM внутри тега <iframe>.

См. Ниже снимок экрана с изображением желаемого тега <iframe> "проверить".

Не удается очистить элементы внутри элемента #document

Кроме того, основная веб-страница, на которой существует тег <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>

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
795
2

Ответы 2

Вы можете получить содержимое iframe с помощью такого кода:

$('#insertHere').contents().find("html").html();


$('#insertHere').contents().find("#MathJax_Message").text();

Если iframe находится в другом домене (похоже, не в вашем случае), защита вашего браузера от межсайтового скриптинга (XSS) заблокирует его.

К сожалению, $ ('# insertHere'). Contents () также пуст. И я не вижу предупреждения от Chrome о XSS. (Хотя веб-сайт, который извлекает «Сценарий содержимого» подключаемого модуля, перенаправляет на поддомен текущего веб-сайта.)

sircasms 03.07.2018 01:49

Можете ли вы провести тест и посмотреть, есть ли у iframe доступ к главной родительской странице (если у вас есть контроль на загружаемой странице iframe)?

PierreN 03.07.2018 07:49

В противном случае есть хороший способ связать 2 страницы с разных доменов: вы можете использовать онлайн-сервисы, такие как "толкатель", который установит канал между страницами ... здесь вы вообще ограничены доменами / поддоменами. Я могу дать вам рабочий код, если вас это интересует. Очевидно, вам нужно иметь возможность добавлять код толкателя в содержимое iframe, которое вы хотите очистить.

PierreN 03.07.2018 07:49

Я попытался получить доступ к родительской странице из iframe и получил следующую ошибку: «SecurityError: заблокировал фрейм с источником от доступа к фрейму с перекрестным источником». Таким образом, похоже, что субдомен того же веб-сайта рассматривается как случай с перекрестным происхождением. Я тестировал с помощью команды dig и получаю разные IP-адреса для домена и поддомена. Так что это могло быть причиной неудачи.

sircasms 04.07.2018 23:37

это звучит очень интересно. Поделитесь, пожалуйста, кодом. :)

sircasms 04.07.2018 23:39

Хорошо, я даю его вам через несколько часов (полночь во Франции ...), вы уже можете создать бесплатную учетную запись pusher.com и протестировать их консоль ..

PierreN 05.07.2018 00:08

#document - это объект документа страницы для iFrame DOM.

Попробуйте получить доступ к document iframe, например

var frame = document.getElementById('#hidden-frame');
console.info(frame.document.body);

Вы также можете попробовать использовать Скрипт содержимого и разрешить его в все страницы с <all_urls>, который должен быть загружен с содержимым iframe, и использовать его для отправки содержимого на background script с помощью обмена сообщениями.

Другие вопросы по теме