Веб-сайт 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
Ответ 4
Свойство window.top
должно быть в состоянии дать то, что вам нужно.
например.
alert(top.location.href)
Ответ 5
Вы также можете использовать
postMessage(message, '*')
;
Ответ 6
вы можете использовать почтовый API (почтовый js/postal xframe/postal fedration)