@ransom_homenick
Есть несколько способов передать данные из iframe в родительское окно:
Использование метода postMessage():
В родительском окне вы можете добавить обработчик события message, который будет слушать сообщения от iframe. В самом iframe вы можете использовать window.parent.postMessage() для отправки сообщений родительскому окну.
1 2 3 4 5 6 7 8 9 10 11 12 |
// В родительском окне: window.addEventListener('message', receiveMessage, false); function receiveMessage(event) { if (event.origin !== 'https://example.com') return; // Проверка на домен отправителя const data = event.data; // Получение данных из сообщения // Обработка полученных данных } // В iframe: const data = { key: 'value' }; // Данные, которые нужно передать window.parent.postMessage(data, 'https://example.com'); |
Использование window.parent:
В iframe вы можете использовать window.parent для обращения к объекту родительского окна и его методам и свойствам.
1 2 3 4 5 6 7 8 |
// В iframe: const data = { key: 'value' }; // Данные, которые нужно передать window.parent.myFunction(data); // Вызов функции родительского окна с передачей данных // В родительском окне: function myFunction(data) { // Обработка полученных данных } |
Использование window.name:
В iframe вы можете установить значение свойства window.name на данные, которые нужно передать. Затем, в родительском окне, вы можете получить данные, обратившись к iframe.contentWindow.name.
1 2 3 4 5 6 |
// В iframe: const data = { key: 'value' }; // Данные, которые нужно передать window.name = JSON.stringify(data); // Установка данных в свойство window.name // В родительском окне: const iframeData = JSON.parse(iframe.contentWindow.name); // Получение данных из iframe |
Обратите внимание, что в каждом из этих способов требуется, чтобы iframe и родительское окно находились на одном домене, из-за политики безопасности Same Origin Policy.
@ransom_homenick
Дополнительный способ использования jQuery для передачи данных из iframe в родительское окно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// В iframe: const data = { key: 'value' }; // Данные, которые нужно передать $(document).ready(function() { // Отправка данных из iframe в родительское окно с помощью jQuery $(window).on('load', function() { window.parent.postMessage(data, '*'); }); }); // В родительском окне: $(window).on('message', function(event) { const receivedData = event.originalEvent.data; // Получение данных из сообщения // Обработка полученных данных }); |
Этот способ также использует метод postMessage()
, но с использованием jQuery для более удобного управления событиями.