как вызвать функцию родительского окна из iframe в javascript

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
1 день назад

Вызов функции родительского окна из iframe в JavaScript можно реализовать через объект window.parent. Вот пошаговое объяснение процесса:

  1. Понимание контекста: Когда мы говорим о вызове функции из iframe, это значит, что код, исполняемый в iframe, должен взаимодействовать с кодом, исполняемым в родительском окне.

  2. Необходимость в доступе: Важно учитывать политику одинакового источника (Same-Origin Policy). Это ограничение браузеров на доступ к ресурсам, находящимся на других источниках. Если родительское окно и iframe загружаются с одного и того же домена, протокола и порта, вы можете свободно взаимодействовать с функциями одного контекста из другого. В противном случае потребуется другой подход (например, работа с postMessage).

  3. Вызов функции: Если доступ к родительскому окну разрешен, вы можете вызвать функцию следующим образом:

Пример:

  1. В родительском окне определите функцию, которую хотите вызвать:
<!-- Родительское окно (parent.html) -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Родительское окно</title>
    <script>
        function greet() {
            alert("Привет из родительского окна!");
        }
    </script>
</head>
<body>
    <h1>Это родительское окно</h1>
    <iframe src="iframe.html"></iframe>
</body>
</html>
  1. В iframe вы можете вызвать эту функцию так:
<!-- Iframe (iframe.html) -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Iframe</title>
    <script>
        function callParentFunction() {
            window.parent.greet(); // Вызов функции родительского окна
        }

        window.onload = function() {
            callParentFunction(); // Вызываем функцию при загрузке iframe
        };
    </script>
</head>
<body>
    <h1>Это iframe</h1>
</body>
</html>

Использование postMessage при нарушении политики одного источника

Если iframe и родительское окно находятся на разных источниках, использование postMessage — это безопасный способ взаимодействия:

  1. Родительское окно:
<!-- Родительское окно (parent.html) -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Родительское окно</title>
    <script>
        window.addEventListener("message", function(event) {
            if (event.origin !== "https://example.com") return; // Проверка источника
            if (event.data === "greet") {
                alert("Привет из родительского окна!");
            }
        }, false);
    </script>
</head>
<body>
    <h1>Это родительское окно</h1>
    <iframe src="https://example.com/iframe.html"></iframe>
</body>
</html>
  1. Iframe:
<!-- Iframe (iframe.html) -->
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Iframe</title>
    <script>
        function notifyParent() {
            window.parent.postMessage("greet", "https://your-parent-domain.com"); // Указываем правильный домен родителя
        }

        window.onload = function() {
            notifyParent(); // Вызываем notifyParent при загрузке iframe
        };
    </script>
</head>
<body>
    <h1>Это iframe</h1>
</body>
</html>

Заключение

Таким образом, вызов функции родительского окна из iframe может быть реализован несколькими способами в зависимости от политики безопасности. Если у вас есть доступ к родительскому окну, используй window.parent. В противном случае стоит обратить внимание на postMessage, который обеспечивает безопасный обмен данными между окнами с разных источников.

0 0

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Тест-драйв

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

Верстка

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.

Базы данных

Фреймворки