Appeler la fonction Javascript parent de l'intérieur d'une iframe
j'ai une iframe (dans mon domaine), qui iframe a un fichier iframe.js
.
mon document parent a un fichier parent.js
.
j'ai besoin d'appeler une fonction qui est dans parent.js
, à partir d'une fonction qui est dans iframe.js
.
j'ai essayé de faire window.parent.myfunction()
cette fonction est dans le parent.js
fichier.
Mais ça n'a pas fonctionné. Seulement quand j'ai mis la fonction sur la page mère (je veux dire dans le HTML), alors ça a marché.
N'importe quelle idée comment obtenir ce travail?
3 réponses
parent.myfunction()
. Soyez également sûr à 100% que le parent.js est inclus dans votre document parent.
je sais que c'est une vieille question, mais au cas où la réponse acceptée ne fonctionne pas (ça n'a pas fonctionné pour moi) vous pouvez faire cela à l'intérieur de parent.js
window.myfunction = function () {
alert("I was called from a child iframe");
}
maintenant de l'iframe vous pouvez appeler mafonction() comme vous le souhaitait initialement
window.parent.myfunction();
Window.postMessage()
méthode permet en toute sécurité cross-origin
la communication.
si vous avez accès à la page parent, alors n'importe quelle donnée peut être passée ainsi que n'importe quelle méthode parent peut être appelée directement à partir de Iframe
.
page Parent:
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 parentFuncName(message) {
alert(message);
}
Iframe code:
window.parent.postMessage({
'func': 'parentFuncName',
'message': 'Message text from iframe.'
}, "*");
Références:
- messagerie trans-document (https://html.spec.whatwg.org/multipage/comms.html#web-messaging)
- la Fenêtre.méthode de post-essai (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)
- Puis-Je Utiliser (http://caniuse.com/#search=postMessage)