Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Как найти элементы внутри iframe с помощью querySelector?

Быстрый ответ

Если вам требуется быстрый доступ к элементам, находящимся внутри iframe, воспользуйтесь комбинацией contentDocument и querySelector. Учтите ограничения политики одного источника. Если вам нужно работать с iframe, размещённом на другом домене, то подумайте о применении CORS или о возможности серверной интеграции:

JS
Скопировать код
var iframe = document.getElementById('iframeId').contentDocument;
var targetElement = iframe.querySelector('.targetClassName');
Кинга Идем в IT: пошаговый план для смены профессии

Интерактивность с несколькими iframes 👥

Работая с несколькими iframes, часто приходится применять определённые операции к каждому из них. Для этого вы можете использовать следующий код:

JS
Скопировать код
document.querySelectorAll('iframe').forEach(iframe => {
  let iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
  let targetElement = iframeDoc.querySelector('.targetClassName');
  console.log(targetElement); // Вот и наш целевой элемент!
});

Этот код идеально подходит для работы с iframes в рамках одного домена. Если же нужно взаимодействовать с iframes с другого домена, потребуются другие подходы, включая возврат к серверной обработке данных или настройке заголовков CORS на целевом домене.

Обход вложений deep-iframe 🎁

Если перед вами сложная задача с iframe, вложенным в iframe, рекурсивная функция станет вашим спасением. Она поможет вам найти элемент:

JS
Скопировать код
function findNestedIframeElements(selector, frame) {
  let result = frame.document.querySelector(selector);
  if (result) {
    return result;
  }
  for (let childFrame of frame.frames) {
    result = findNestedIframeElements(selector, childFrame);
    if (result) {
      return result;
    }
  }
  return null; // Проверяем все варианты!
}
// Использовать так: findNestedIframeElements('.yourSelector', window);

Обработка исключений и проверка доступности ☑️

Прежде чем взаимодействовать с iframe, убедитесь, что iframe и его содержание полностью загружены:

JS
Скопировать код
let iframe = document.querySelector('iframe');
if (iframe && iframe.contentWindow && iframe.contentDocument) {
  // Можно приступать к работе.
} else {
  console.error("Iframe или его содержимое ещё не загружены");
  // Будьте осторожны! Возможны ошибки.
}

Такой подход защитит вас от ошибок, связанных с неотгруженным контентом!

Визуализация

Восприятие доступа к iframe можно иллюстрировать как наблюдение через перископ:

Markdown
Скопировать код
🖥️ Основной документ: "Я не вижу содержимого (элементов) внутри this black box (iframe)!"

Используя document.querySelector('iframe').contentWindow, вы получите доступ:

JS
Скопировать код
const periscope = document.querySelector('iframe').contentWindow;
const fishes = periscope.document.querySelector('selector');
// Вуаля! Содержимое доступно!

Вот так и вы можете «заглянуть» в мир iframe через contentWindow:

Markdown
Скопировать код
👀 [🖥️] ==> 🔭 [перископ iframe] ==> 🐠 (объекты, указанные селектором, внутри iframe)

Делимся хитростями: как работать с кодом iframe ⚙️

Динамическая загрузка содержимого в iframe

MutationObserver и обработчики событий необходимы при взаимодействии с динамическим содержимым внутри iframes.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Управление ограничениями доступа в iframe

Проведите исследование атрибута sandbox, чтобы понять его влияние на безопасность и функционал скриптов.

Совершенствование навыков отладки

Изучите функционал консоли браузера и фичи отладки для того, чтобы быть уверенным в результате своих действий.

Полезные материалы

Для более глубокого погружения в тему, познакомьтесь с этими ресурсами:

  1. Document: метод querySelector() – Web APIs | MDN
  2. <iframe>: Элемент встроенного фрейма – HTML: HyperText Markup Language | MDN
  3. javascript – Получение элемента из iframe – Stack Overflow
  4. Хитрость с единицами вьюпорта на мобильных устройствах | CSS-Tricks
  5. HTML DOM Document querySelector() Method
  6. javascript – jQuery.ready в динамически добавленном iframe – Stack Overflow
  7. Fetch Standard
  8. Безопасность работы с iframe в песочнице | Статьи | web.dev
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как получить доступ к элементам внутри iframe?
1 / 5