The website in the iframe isn\'t located in the same domain, but both are mine, and I would like to communicate between the iframe
and the parent site. Is it possible?
问题:
回答1:
With different domains, it is not possible to call methods or access the iframe\'s content document directly.
You have to use cross-document messaging.
For example in the top window:
myIframe.contentWindow.postMessage(\'hello\', \'*\');
and in the iframe:
window.onmessage = function(e){
if (e.data == \'hello\') {
alert(\'It works!\');
}
};
If you are posting message from iframe to parent window
window.top.postMessage(\'hello\', \'*\')
回答2:
This library supports HTML5 postMessage and legacy browsers with resize+hash https://github.com/ternarylabs/porthole
Edit: Now in 2014, IE6/7 usage is quite low, IE8 and above all support postMessage
so I now suggest to just use that.
https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
回答3:
It must be here, because accepted answer from 2012
In 2018 and modern browsers you can send a custom event from iframe to parent window.
iframe:
var data = { foo: \'bar\' }
var event = new CustomEvent(\'myCustomEvent\', { detail: data })
window.parent.document.dispatchEvent(event)
parent:
window.document.addEventListener(\'myCustomEvent\', handleEvent, false)
function handleEvent(e) {
console.log(e.detail) // outputs: {foo: \'bar\'}
}
PS: Of course, you can send events in opposite direction same way.
document.querySelector(\'#iframe_id\').contentDocument.dispatchEvent(event)
回答4:
the window.top
property should be able to give what you need.
E.g.
alert(top.location.href)
See http://cross-browser.com/talk/inter-frame_comm.html