Как передать данные из iframe в родительское окно?

Пользователь

от ransom_homenick , в категории: JavaScript , год назад

Как передать данные из iframe в родительское окно?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , год назад

@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.

Пользователь

от jorge , 4 месяца назад

@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 для более удобного управления событиями.