Der Umgang mit Kind und Enkel Fenster in Javascript
-
04-07-2019 - |
Frage
Ich habe ein Hauptfenster (# 1) auf meiner Webseite, von dem mir ein neues Browserfenster öffnen (# 2), von dem ich ein neues Fenster öffnen (# 3).
Nun, wenn mein Benutzer-Fenster schließt # 2 vor dem Fenster # 3, habe ich das Problem, das Fenster # 3 nicht mehr funktioniert in seinen window.opener nennen kann, da er weg ist.
Was würde Ich mag tun Fenster # 3.opener auf Fenster # 1, wenn Fenster # 2 schließt einzustellen.
Ich habe versucht, dieses i Fenster # 2 zu tun (übrigens benutze ich jquery):
var children = [];
$(window).unload( function( ) {
$.each( children, function( p, win ) {
if ( win ) {
win.opener = window.opener;
}
} );
} );
Wenn Fenster # 3 geladen wird füge ich das Fenster zu den Array-Kinder in Fenster # 2.
Aber immer noch, wenn das Fenster # 2 vor dem Fenster # 3 verschlossen, Fenster # 3 des window.opener verweist nicht auf Fenster # 1.
Wie kann ich sicherstellen, dass meine Groß Kind Fenster (Fenster # 3), nach wie vor das Hauptfenster aufrufen (Fenster # 1) nach Fenstern # 2 geschlossen ist?
Lösung
In der dritten wndow Sie setzen in:
<script type="text/javascript">
var grandMother = null;
window.onload = function(){
grandMother = window.opener.opener;
}
</script>
So haben Sie den Griff in die Großmutter-Fenster, und Sie können es dann für etwas verwenden, um direkt:
if(grandMother)
grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-";
Andere Tipps
Sie sollten einen Verweis auf das Hauptfenster erstellen, wenn die dritte öffnet:
parent = window.opener.opener
Dies wird die zweite Fenster Schließung überleben.
window.opener
wahrscheinlich ist schreibgeschützt. Ich würde Ihre eigene Setup-Eigenschaft auf die Großeltern beziehen, wenn Enkel geladen wird.
function onLoad() {
window.grandparent = window.opener.opener;
}
Dies kann tangential, aber warum brauchen Sie 3 separate Fenster öffnen? Können Sie stattdessen einen jQuery-Dialog verwenden? Ich bekomme sehr frustriert, wenn apps öffnen Fenster auf mich.
var main_window = get_main_window();
function get_main_window(){
var w = window;
while(w.opener !== null){
w = w.opener;
}
return w;
}