Window.postMessage()
This method safely enables cross-origin
communication.
And if you have access to parent page code then any parent method can be called as well as any data can be passed directly from Iframe
. Here is a small example:
Parent page:
if (window.addEventListener) { window.addEventListener("message", onMessage, false); } else if (window.attachEvent) { window.attachEvent("onmessage", onMessage, false); } function onMessage(event) { // Check sender origin to be trusted if (event.origin !== "http://example.com") return; var data = event.data; if (typeof(window[data.func]) == "function") { window[data.func].call(null, data.message); } } // Function to be called from iframe function parentFunc(message) { alert(message); }
Iframe code:
window.parent.postMessage({ 'func': 'parentFunc', 'message': 'Message text from iframe.' }, "*"); // Use target origin instead of *
UPDATES:
Security note:
Always provide a specific targetOrigin, NOT *
, if you know where the other window's document should be located. Failing to provide a specific target discloses the data you send to any interested malicious site (comment by ZalemCitizen).
References: