Thomas: von Popup aus zurück auf das aufrufende Frame verweisen

Hi Helpers

Mein Problem ist etwas komplizierter ^^
Am Besten schildere ich mal was ich will:
Also, ich habe eine Seite mit zwei Frames (f_menu/f_main).
Im f_main hab ich einen Link, der ein Popup öffnet.
Und nun möchte ich, dass man vom Popup aus, die angezeigte Seite im f_main-Frame verändern kann und gleichzeitig das Popup geschlossen wird.
Alles klar? :)

Für den IE habe ich folgenden Code, der auch funktioniert:
<a href="/cgi-bin/karte.cgi?feldid=123456" target="f_main" onClick="javascript:self.close()">Dieses Feld zentrieren</a>

Wie's halt so ist, funktioniert das nicht bei allen Browsern gleich, und so kommts, dass es beim Firefox in der neusten Version halt nicht geht. D.h. das Popup geht zu, aber das f_main-Frame wird nicht neu geladen. (wenn ich onclick... rausnehme, bleibt das Popup zwar offen (oh Wunder), dafür wird diesmal das f_main-Frame neu geladen)

Ich kam dann auf die gloreiche Idee, beide Aktionen mit Javascript zu coden. Allerdings meint Javascript dann, dass ich gar keine Frames habe. (bezieht sich wohl nur noch auf das Popup!?)

Hat einer eine noch bessere Idee oder kann mir sonstwie helfen? Wäre ich wirklich sehr dankbar.

  1. Hallo Thomas,

    Wäre dir vielleiocht mit opener geholfen?

    Gruß Gernot

  2. Hello,

    veruch es mal mit

    if(opener)
      {
        opener.location.href = opener.location.href;
      }

    Das hat den Vorteil, dass ggf. auch gesetzte Anker wieder im Aufruf erscheinen.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. danke vielmals Dir und Gernot!
      opener ist genau das, wonach ich suchte :)

      ich frag mich, warum selfhtml opener bei der Objektreferenz nicht aufführt. opener findet man nur bei zwei kleinen beispielen.

      hier noch meine lösung, falls mal wer danach sucht: (funktioniert für IE und FF)

      <script type="text/javascript">
      function open_close() {
      opener.location.href = "blabla";
      self.close(); }
      </script>

      <a href="javascript:open_close()">Dieses Feld zentrieren</a>

      if(opener)
        {
          opener.location.href = opener.location.href;
        }

      mir als javascript-laie sagt dieser code nicht so viel. wenn du denkst dass er sauber und eleganter ist, darfst du ihn mir erklären :)

      1. Hello,

        if(opener)
          {
            opener.location.href = opener.location.href;
          }

        mir als javascript-laie sagt dieser code nicht so viel. wenn du denkst dass er sauber und eleganter ist, darfst du ihn mir erklären :)

        Ob ich dafür nun der Richtige bin?
        Hier gibts bezüglich JavaScript bessere Erklärer ;-)

        Aber ich gehe immer von Usern aus, die nicht programmiert sind, sondern noch so ungefähr machen, was sie wollen. Wenn nun jemand, nachdem er das Popup geöffnet hat, das Opener-Window schließt, dann ist es ja nicht mehr da, wenn die Funktion aufgerufen wird.

        Und Du willst ja beim Opener dieselbe URL reloaden, oder? Wenn Du den Post, der ggf. dazugehörte, nicht nochmals absenden willst, ist die beschriebene Methode besser als ein 'reload'.

        Das Zuweisen einer Konstanten ist mir bei solchen Popups immer nicht universell genug. Wenn das Projekt dann verschoben oder kopiert wird, muss man das ggf. alles nachbessern.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. aha, if(opener) schaut ob das fenster noch offen ist. ^^ jetzt wo man es weiss ist es schon fast peinlich danach gefragt zu haben :)
          aber die syntax ist wahrlich gewöhnungsbedürftig. ich hätte sowas wie "exists" oder "> 0" erwartet ;)
          und der zweite teil ist einfach ein reload. ok. thx!

          Ob ich dafür nun der Richtige bin?

          na aber logo

          1. Hello,

            aha, if(opener) schaut ob das fenster noch offen ist. ^^

            Nicht ganz.
            Da gibt es auch noch die Eigenschaft closed.
            Deshalb war ich mir eben auch nicht sicher, ob das so schon richtig ist.

            Generell stelle ich mir das so vor:

            Wenn das Fenster ein Folgefenster (z.B. Popup) ist, hat es einen opener.
              Dieser muss aber zum Zeitpunkt des Triggerns der Funktion nicht mehr aktiv sein.
              Wenn also ein Opener vorhanden ist, müsste man vermutlich noch prüfen, ob

            opener.closed == false

            ist. Dann müsste das Fenster noch offen sein.

            Die Abfrage müsste dann mMn richtig heißen

            if(opener and opener.closed == false)
              {

            }

            JavaScript ist da etwas empfindlich.

            Ich hoffe, hier liest noch jemand mit, der es genau weiß.

            Du müsstest diese Prüfung dann eigentlich allen Modifikationen der Eigenschaften im Opener vorausschicken. Denn wann das Fenster vom User geschlossen wurde, weißt Du schließlich nicht.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. opener.closed == false

              ich mach morgen dann ein paar tests mit verschiedenen browsern, um herauszufinden was die beste lösung ist.
              also der IE reklamiert auf jeden fall nicht, wenn man beim opener was ändern will, dieser jedoch schon nicht mehr existiert. vermutlich wird das intern schon abgefangen und wir machen uns die mühe umsonst ^^

              1. Hello,

                also der IE reklamiert auf jeden fall nicht, wenn man beim opener was ändern will, dieser jedoch schon nicht mehr existiert. vermutlich wird das intern schon abgefangen und wir machen uns die mühe umsonst ^^

                Dazu musst Du aber bitte auch die Debuginformationen für JavaScript einschalten. Die stehen standardmäßig auf disabled, damit die ganzen Viren und Würmer, die da so durchs Netz kriechen, bei Otto-Normal-User nicht dauernd Meldungen hervorrufen ;-))

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau