Si la cible de l'iFrame et le document qui la contient se trouvent sur un domaine différent, les méthodes affichées précédemment risquent de ne pas fonctionner, mais il existe une solution :
Par exemple, si le document A contient un élément iframe qui contient le document B, et que le script du document A appelle postMessage() sur l'objet Window du document B, alors un événement message sera déclenché sur cet objet, marqué comme provenant de la Window du document A. Le script du document A pourrait ressembler à ceci :
var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello world', 'http://b.example.org/');
Pour enregistrer un gestionnaire d'événements pour les événements entrants, le script utiliserait addEventListener() (ou des mécanismes similaires). Par exemple, le script du document B pourrait ressembler à ceci :
window.addEventListener('message', receiver, false);
function receiver(e) {
if (e.origin == 'http://example.com') {
if (e.data == 'Hello world') {
e.source.postMessage('Hello', e.origin);
} else {
alert(e.data);
}
}
}
Ce script vérifie d'abord que le domaine est le domaine attendu, puis examine le message, qu'il affiche à l'utilisateur ou auquel il répond en renvoyant un message au document qui a envoyé le message en premier lieu.
via http://dev.w3.org/html5/postmsg/#web-messaging
1 votes
Notez que lors du débogage, vous pouvez faire des choses comme window.location.href ou parent.location.href pour afficher l'url de la iframe, si vous voulez vérifier que vous avez une référence à la iframe que vous recherchez.