Christian Werner: dynamisches schließen von Fenstern mit Javascript

Hallo Leute,
ich habe folgende Situation:
Eine Web-Anwendung erzeugt unter anderem einige Pop-Up-Fenster (z.B. Hinweis dass gespeichert wurde, Daten-Detail-Ansicht, usw).
Bisher schließe ich die Fenster alle explizit über z.B. wait.close()

Ich möchte dies nun aber dynamisch mit einer kleinen Schleife programmieren. Leider habe ich keine Möglichkeit gefunden wie ich mir die Namen der Pop-Fenster ermitteln kann.
Hat jemand eine Idee wie man so was machen kann?

Alternativ wäre es auch eine Lösung alle Pop-Fenster ohne Fenster-Namen schließen zu können.

Christian

  1. Hallo Christian,

    Bisher schließe ich die Fenster alle explizit über z.B. wait.close()
    Ich möchte dies nun aber dynamisch mit einer kleinen Schleife programmieren. Leider habe ich keine Möglichkeit gefunden wie ich mir die Namen der Pop-Fenster ermitteln kann.

    Name des Popups != Referenz zu selbigem. Selbst wenn es ginge würde es dir nichts bringen. Schließen eines Fenster geht nur über dessen Referenz.

    Hat jemand eine Idee wie man so was machen kann?

    Speichere den Rückgabewert von window.open() in einem Array, dann kannst du bei Bedarf über if(win[i] || !win[i].closed) ein win[i].close() ausführen.

    HTH

    Jochen

    1. Hallo Jochen,

      danke für den Tip. Ist wirklich gut, nur hab ich noch das Problem, dass die Pop-Ups auch von Unterseiten (also z.B. aus einem anderen Pop-Up oder einem Frameset) aufgerufen werden können. Somit kann ich die Fensternamen leider nicht im das Array des Root-Parent schreiben. ;-(

      Christian

      1. Hallo Christian,

        Somit kann ich die Fensternamen leider nicht im das Array des

        ^^^^^^^^^^^^
        Es sind keine Namen, es sind die Referenzen!

        Root-Parent schreiben. ;-(

        doch: opener.win[opener.index++]=window.open(..)

        Grüße,

        Jochen

        1. Hallo Jochen,

          jetzt hab ich kapiert, dass es ich hierbei um die Refs handelt ;-))
          mit

          doch: opener.win[opener.index++]=window.open(..)

          kann ich doch aber nur in den opener also eine Stufe höher schreiben. Wie sieht das aus, wenn ich jetzt ein Pop-Up öffne und aus diesem heraus noch ein weiteres Pop-Up öffne. So komme ich doch mit opener nur in das erste Pop-Up und nicht auf meine Stammseite ... oder???

          Thanx schon mal für die Hilfe...

          Christian

          1. hi,

            doch: opener.win[opener.index++]=window.open(..)

            kann ich doch aber nur in den opener also eine Stufe höher schreiben. Wie sieht das aus, wenn ich jetzt ein Pop-Up öffne und aus diesem heraus noch ein weiteres Pop-Up öffne. So komme ich doch mit opener nur in das erste Pop-Up und nicht auf meine Stammseite ... oder???

            wenn opener auf das öffnende fenster eines popups zeigt, was zeigt dann wohl auf dessen öffner ...?

            dein vater ist christian.papa - dem zufolge ist dein opa christian.papa.papa ...

            gruss,
            wahsaga

            1. Hi

              dein vater ist christian.papa - dem zufolge ist dein opa christian.papa.papa ...

              das ist schon klar. Doch wie löst man so was wenn z.B. das Wartefenster sowohl vom Opa als auch vom Vater und vielleicht auch noch von Sohn oder vom Sohn des Sohnes aufgerufen wird ????

              Trotzdem Thanx für die Hilfe ...

              Christian

  2. Ich möchte dies nun aber dynamisch mit einer kleinen Schleife programmieren. Leider habe ich keine Möglichkeit gefunden wie ich mir die Namen der Pop-Fenster ermitteln kann.

    den kannst du auch nicht ermitteln, bzw. nicht das was du dafür hälst. window.name existiert zwar du willst aber vermutlich den Namen der Variabel ermitteln das geht nicht.

    Hat jemand eine Idee wie man so was machen kann?

    entweder du speicherst die referenzen der Fenster in einem Array oder du gehst alle möglichen Namen durch öffnest diese und schliesst sie gleich wieder:

    for(var n in (name1, name2, name3))
    var w = open('#', n).close();

    ist die einzige Möglichkeit an die referenz zu kommen, wenn du den Namen weißt.

    Struppi.

    1. Hallo Struppi,

      anscheinend führt kein Weg dran vorbei die Namen manuell in das Script einzubauen ;-((

      Aber was noch ein unschöner Nebeneffekt bei
      var w = open('#', n).close();
      oder bei
      fenster1 = window.open('#','fenster1');
      fenster1.close();

      ist: Ich bekomme immer eine kleines aufflackern des neu geöffneten Fensters. Kann man das unterbinden?

      Christian

      1. ist: Ich bekomme immer eine kleines aufflackern des neu geöffneten Fensters. Kann man das unterbinden?

        nö. du machst ja das Fenster erst auf, aber du könntest es ausserhalb des sichbereichs öffnen (top,left ganz gross).
        Struppi.