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?

29
demandé sur Vikram 2011-08-03 20:37:56

3 réponses

parent.myfunction(). Soyez également sûr à 100% que le parent.js est inclus dans votre document parent.

57
répondu invertedSpear 2011-08-03 16:51:41

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(); 
24
répondu Moses Machua 2014-01-22 02:01:45

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:

8
répondu Andrii Verbytskyi 2017-01-13 08:15:30