Vous ne pouvez pas globaliser les variables/fonctions des fenêtres à meneaux/Iframe de cette façon. Chaque fenêtre/iframe a sa propre portée globale et pour cibler des variables/fonctions dans une autre fenêtre/iframe, vous avez besoin d'un code d'accès explicite et conforme à la same origin policy. Seules les variables/fonctions à l'intérieur de la portée globale windows/iframes sont accessibles.
code dans la fenêtre supérieure.
var iframe = document.getElementById('iframeId');
var iframeContext = iframe.contentWindow || iframe;
// this will only work if your iframe has completed loading
iframeContext.yourFunction();
Vous pouvez également définir éventuellement des fonctions/variables dans la fenêtre du haut lieu et simplement travailler dans un champ en liant les choses dont vous avez besoin de l'iframe par une fermeture. Encore une fois, en supposant que vous répondez à la même politique d'origine. Cela ne fonctionnera pas dans le domaine croisé.
code en iframe.
var doc = document;
var context = this;
top.myFunction = function(){
// do stuff with doc and context.
}
Il est également important de noter que vous devez vérifier si votre contenu iframe et il est des scripts sont entièrement chargés. Votre page/fenêtre supérieure ne sera pas exécutée et ne fonctionnera pas avant que votre contenu iframe soit terminé, les variables/fonctions ergo peuvent ne pas être encore déclarées.
En ce qui concerne l'exposition d'une fonction privée, d'autres ont répondu, mais copier/coller pour l'exhaustivité.
var fnB;
var fnA = function(){
var msg = "hello nurse!";
fnB = function(){
alert(msg);
}
}
J'ai l'Habitude de déclarer se fonctions uniquement en tant que variables (expression de fonction) et que les instructions de fonction de l'utilisation pour signifier constructeurs/pseudo-classes. Cela évite aussi quelques erreurs gênantes possibles. Dans tous les cas, fnB réside dans la portée globale de l'iframe et est disponible dans la fenêtre supérieure.
Pourquoi exactement vous voulez cela me bat, semble que cela complique la mise au point ou la mise à jour quelques mois plus tard.
Je me demande ce que vous cherchez avec quelque chose comme ça avec javascript? –
Amirouche - voir la clarification que j'ai ajoutée au texte de la question principale ... –
BTW tout le monde notez que quand je suis tombé sur ce problème, oui, je viens juste de-imbriqué la fonction et résolu le problème:) Je suis juste curieux d'un point de vue théorique. –