Comment communiquer entre iframe et le site parent?
Le site web dans l'iframe n'est pas situé dans le même domaine, mais les deux sont à moi, et je voudrais communiquer entre les iframe
et le site parent. Est-il possible?
Vous devez vous connecter pour publier un commentaire.
Avec des domaines différents, il n'est pas possible d'appeler des méthodes d'accès ou le contenu de l'iframe document directement.
Vous devez utiliser la croix-document de messagerie.
Par exemple, dans la fenêtre du haut:
et dans l'iframe:
Si vous envoyez une message à partir de l'iframe de la fenêtre parent
window.onmesage = function()...
. Dans l'iframe:window.top.postMessage('hello', '*')
Unsafe JavaScript attempt to access frame with URL file:///iframe.html from frame with URL file:///parent.html. Domains, protocols and ports must match.
file://C:/Windows/system32/whatever
sur une page web et d'en faire le point de droit dans le système de l'utilisateur dossier. Ces jours-ci la plupart des navigateurs ignorer les clics sur des liens comme ça. Exécuter un serveur web et d'accéder à votre code grâce à cela et vous verrez les erreurs diappear.window.frames[index]
pour obtenir de l'image enfant (<iframe>, <object>, <frame>
), équivalent àgetElementsByTagName("iframe")[index].contentWindow
. Pour obtenir de la Fenêtre Parent de l'Objet à partir des IFrames, il est préférable d'utiliserwindow.parent
, commewindow.top
représente le Plus Haut de la Fenêtre ParentIl doit être ici, parce que accepté de répondre à partir de 2012
En 2018 et des navigateurs modernes, vous pouvez envoyer un événement personnalisé à partir de l'iframe de la fenêtre parent.
iframe:
parent:
PS: bien sûr, vous pouvez envoyer des événements dans la direction opposée de la même manière.
dispatchEvent
est pris en charge dans tous les principaux navigateurs. IE9 a été la première version, il est venu, donc la plupart des OSs maintenant de travailler avec elle. caniuse.com/#search=dispatchEventCette bibliothèque prend en charge le HTML5 postMessage et les anciens navigateurs avec redimensionnement+de hachage https://github.com/ternarylabs/porthole
Edit: Maintenant, en 2014, IE6/7 utilisation est assez faible, IE8 et surtout à soutenir
postMessage
j'ai donc maintenant de suggérer à l'utiliser.https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
la
window.top
propriété doit être en mesure de donner ce dont vous avez besoin.E. g.
Voir
http://cross-browser.com/talk/inter-frame_comm.html
Vous pouvez également utiliser
postMessage(message, '*')
;