webentwicklung-frage-antwort-db.com.de

So erhalten Sie die Referenzen aller bereits geöffneten untergeordneten Fenster

Ich möchte die Referenzen aller bereits geöffneten untergeordneten Fenster abrufen. gibt es irgendeinen Weg? Ich verwende child = window.open(....) nicht nur mit window.open(....) und öffne mehrere untergeordnete Fenster.

Wenn Sie Ihren aktuellen Code nicht ändern möchten, können Sie die Funktion window.open() einfach überschreiben:

var openedWindows = [];
window._open = window.open; // saving original function
window.open = function(url,name,params){
    openedWindows.Push(window._open(url,name,params));
    // you can store names also...
}

Führen Sie diesen Code aus, bevor Sie window.open() aufrufen. Alle Verweise auf die geöffneten Fenster werden im openedWindows-Array gespeichert. Sie können auf sie zugreifen, wo immer Sie möchten

57

Ich glaube nicht, dass Sie das können, es sei denn, Sie kennen die Namen der Fenster. (Wenn Sie deren Namen kennen, können Sie window.open("", "name") verwenden, um einen Verweis auf sie zu erhalten.)

Die bessere Option ist natürlich, sich an die Referenz zu erinnern, die window.open überhaupt zurückgegeben hat - aber das wissen Sie. :-)

16
T.J. Crowder

OK, ich habe die Antworten auf diese Frage in Oracle CRM onDemand verwendet, um eine Auswahl in einem Popup-Fenster zu deaktivieren, das das Skript im übergeordneten Fenster ausführt, und es hat funktioniert! (Ich habe keine Kontrolle über die Generierung von Popup-Fenstern, sie werden vom Anwendungsframework geöffnet.)

Mal sehen, wie ich es gemacht habe:

Kontext : Auf einer Detailseite kann der Benutzer Informationen hinzufügen, indem er auf ein Lupensymbol klickt. >>> Ein neues Fenster wird geöffnet, das ein Suchformular enthält. Der Administrator wird jedoch durch eine Auswahl gestört: Wenn der Benutzer seinen Standardwert ändert er/sie erhält Zugang zu verbotenen Datensätzen !! Ach du lieber Gott!

Erster Ansatz : Deaktiviere diese Auswahl jetzt !!

Versuch : Ich habe das Onclick-Attribut des Bildes mit den Dev-Tools meines Browsers (F12) gefunden. Es gab eine openAssocPopup-Methode, und dann wusste ich den Namen des untergeordneten Fensters: 'OccamPopup1' :)

Okay! Also machen wir etwas Magie (ausgeführt im übergeordneten Fenster): 

window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true);

Ich denke, das kann helfen, da mir diese Frage auch geholfen hat. Du hattest Recht. Jetzt versuche ich, das Dokumentobjekt des Kindes in das jQuery-Objekt des Elternteils zu packen, damit ich Zugriff auf das gesamte DOM des Kindes erhalten kann. Aber dies ist eine andere Geschichte ...

Am besten benennen Sie die Fenster mit einem Präfix und einem Zähler.

Ich musste feststellen, ob ein benanntes Fenster (d. H. CBCheckout) bereits geöffnet war, und Folgendes verwendet:

var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1');
try {
    if (signupWindow.document.location.href == "about:blank") {
        signupWindow.close();
        signupWindow = undefined;
    }
} catch (e) { }

Dadurch wurde der Verweis auf das genannte offene Fenster erneut erfasst. Wenn es nicht existiert, wird für eine Sekunde ein kleines Fenster angezeigt.

Wenn Sie die möglichen Namen der Fenster kennen, können Sie die Namen durchgehen und versuchen, sie zu finden.

0
Derek Wade