How to communicate between iframe and the parent s

2019-01-01 06:38发布

问题:

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