Как общаться между iframe и родительским сайтом?

Веб-сайт iframe не расположен в том же домене, но оба являются моими, и я хотел бы общаться между iframe и родительским сайтом. Возможно ли это?

Ответ 1

Для разных доменов невозможно вызывать методы или обращаться к документу с содержимым iframe напрямую.

Вы должны использовать обмен сообщениями между документами.

Например, в верхнем окне:

 myIframe.contentWindow.postMessage('hello', '*');

и в фрейме:

window.onmessage = function(e){
    if (e.data == 'hello') {
        alert('It works!');
    }
};

Если вы отправляете сообщение из iframe в родительское окно

window.top.postMessage('hello', '*')

Ответ 2

Это должно быть здесь, потому что принят ответ от 2012 года

В 2018 и современных браузерах вы можете отправлять пользовательское событие из iframe в родительское окно.

IFrame:

var data = { foo: 'bar' }
var event = new CustomEvent('myCustomEvent', { detail: data })
window.parent.document.dispatchEvent(event)

родитель:

window.document.addEventListener('myCustomEvent', handleEvent, false)
function handleEvent(e) {
  console.log(e.detail) // outputs: {foo: 'bar'}
}

PS: Конечно, вы можете отправлять события в противоположном направлении.

document.querySelector('#iframe_id').contentDocument.dispatchEvent(event)

Ответ 3

Эта библиотека поддерживает HTML5 postMessage и устаревшие браузеры с изменением размера + хэш https://github.com/ternarylabs/porthole

Изменить: теперь в 2014 году использование IE6/7 довольно невелико, IE8 и, прежде всего, поддерживают postMessage, поэтому я предлагаю просто использовать это.

https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

Ответ 5

Вы также можете использовать

postMessage(message, '*');

Ответ 6

вы можете использовать почтовый API (почтовый js/postal xframe/postal fedration)