Auf diese Weise können Sie keine Variablen/Funktionen über Windows/iframes hinweg globalisieren. Jedes Fenster/iframe hat seinen eigenen globalen Geltungsbereich, und um Variablen/Funktionen in einem anderen Fenster/iframe anzuvisieren, benötigen Sie expliziten Accessor-Code und müssen sich an die Politik des gleichen Ursprungs . Nur Variablen/Funktionen innerhalb des globalen Bereichs Windows/iframes sind zugänglich.
Code im oberen Fenster.
var iframe = document.getElementById('iframeId');
var iframeContext = iframe.contentWindow || iframe;
// this will only work if your iframe has completed loading
iframeContext.yourFunction();
Sie könnten auch möglicherweise Funktionen/Variablen im oberen Fenster stattdessen definieren und einfach in einem Bereich arbeiten, indem Sie die Sachen, die Sie aus dem Iframe benötigen, durch eine Schließung binden. Wiederum unter der Voraussetzung, dass Sie die gleiche Herkunftsrichtlinie einhalten. Dies wird nicht domänenübergreifend funktionieren.
Code im Iframe.
var doc = document;
var context = this;
top.myFunction = function(){
// do stuff with doc and context.
}
Es ist auch wichtig zu beachten, dass Sie überprüfen müssen, ob Ihr Iframe-Inhalt und seine Skripte vollständig geladen sind. Ihre obere Seite/Fenster wird versehentlich fertig sein und laufen, bevor Ihr Iframe-Inhalt fertig ist, ergo sind Variablen/Funktionen möglicherweise noch nicht deklariert.
Was die Freigabe einer privaten Funktion betrifft, so haben andere dies bereits getan, aber ich kopiere und füge es der Vollständigkeit halber ein.
var fnB;
var fnA = function(){
var msg = "hello nurse!";
fnB = function(){
alert(msg);
}
}
Ich habe die Angewohnheit, eigenständige Funktionen als Variablen zu deklarieren (Funktionsausdruck) und Funktionsanweisungen nur zur Kennzeichnung von Konstruktoren/Pseudoklassen zu verwenden. Das vermeidet auch ein paar mögliche peinliche Fehler. In jedem Fall befindet sich fnB im globalen Bereich des iframe und ist für das obere Fenster verfügbar.
Warum genau Sie das wollen, ist mir schleierhaft. Es scheint, dass es die Fehlersuche oder Aktualisierung ein paar Monate später komplizierter macht.