Bruno Meudt: Fenster per function öffnen und dort beliebige Grafik anzeigen

Liebe Grüße in die Runde.

Nachdem ich die ganze Nacht alles was mir an Doku und sonstwie online in die Hände gefallen ist, durchgegraben habe und das Prob nicht zu lösen ist...schon mal dankeschön. Irgend jemand hat bestimmt 'ne Idee:

Von einer Seite aus soll per Hyperlink ein neues Fenster geöffnet und darin eine Grafik dargestellt werden. Soweit klar.
Jetzt kommt das Prob. Das "neue Fenster" ist ein 2-teiliges Frameset (Name thumbs und picmain, htm-Dateien sind vorhanden und zugewiesen). Die img-src wird als Parameter mitübergeben. Der IE 6.0 SP1 ist so tolerant und spielt mit, Netscape 7.1 begnügt sich damit, das Fenster zu öffnen, neue Grafik aber Fehlanzeige. Meldung: "fenster.parent.picmain has no properties".
Die function, die das bewerkstelligt, steckt in der Datei popup.js:

var fenster;
function popWup(DokName,FensterName,Attribute,BildX) {
 fenster = window.open(DokName,FensterName,Attribute);
 fenster.focus(); // bis hierher alles ok
 if (BildX!='') { // ungleich leer, dann neues Bild
 fenster.parent.picmain.document.Bild.src=BildX;
 }                // IE ok, Netscape kein neues Pic!
}

Die Params kommen korrekt an. Durch einbauen von alerts habe ich noch feststellen können:
Unmittelbar bevor die neue src zugewiesen werden soll, hat der IE das Fenster vollständig dargestellt. Netscape hingegen zeigt zwar das Fenster, aber ohne Inhalt. Somit ist klar: Er findet das Bild namens "Bild" nicht, weil er die Seite noch gar nicht aufgebaut hat.
Wie um alles in der Welt kriegt man das hin??

Gruß und Dank
Bruno Meudt

  1. Hallo!

    Unmittelbar bevor die neue src zugewiesen werden soll, hat der IE das Fenster vollständig dargestellt. Netscape hingegen zeigt zwar das Fenster, aber ohne Inhalt. Somit ist klar: Er findet das Bild namens "Bild" nicht, weil er die Seite noch gar nicht aufgebaut hat.
    Wie um alles in der Welt kriegt man das hin??

    Baue in das <body>-Element des Popups den entsprechenden Eventhandler ein und lasse dann die Funktion darüber aufrufen (evtl. die Funktion im opener).

    Gruß und Bitte
    mdkiller

    P.S.: Popups sind böse!

    1. Hallo!

      Unmittelbar bevor die neue src zugewiesen werden soll, hat der IE das Fenster vollständig dargestellt. Netscape hingegen zeigt zwar das Fenster, aber ohne Inhalt.

      Baue in das <body>-Element des Popups den entsprechenden Eventhandler ein und lasse dann die Funktion darüber aufrufen (evtl. die Funktion im opener).

      Hallo mdkiller, thx für die schnelle Aw. Da ich (noch) nicht der Javascriptler vor dem Herrn bin, bitte ich Dich, Deinen Vorschlag etwas näher zu kommentieren. Das ganze gibt auch kein popup, sondern eine kontextsensitive Anzeigemöglichkeit für Bildmaterial, welches in einem Fotoalbum steckt, das bereits eine eigene Oberfläche (eben jenes "neue Fenster") hat. Dies soll nun getriggert werden, will heißen, Fenster auf und bittesehr mit einem ganz bestimmten Pic.
      Wie gesagt, IE machts, Netscape öffnet zwar das Fenster, welches dann aber das auf der Seite voreingestellte (erste) Pic der Serie zeigt und nicht das als Param übergebene. Danke Dir schon mal.

      Gruß
      Bruno

      1. Hallo Bruno!

        Unmittelbar bevor die neue src zugewiesen werden soll, hat der IE das Fenster vollständig dargestellt. Netscape hingegen zeigt zwar das Fenster, aber ohne Inhalt.

        Baue in das <body>-Element des Popups den entsprechenden Eventhandler ein und lasse dann die Funktion darüber aufrufen (evtl. die Funktion im opener).

        Hallo mdkiller, thx für die schnelle Aw. Da ich (noch) nicht der Javascriptler vor dem Herrn bin, bitte ich Dich, Deinen Vorschlag etwas näher zu kommentieren.

        Na gut:
        Deine Funktion

        var fenster;
        function popWup(DokName,FensterName,Attribute,BildX) {
        fenster = window.open(DokName,FensterName,Attribute);
        fenster.focus(); // bis hierher alles ok
        if (BildX!='') { // ungleich leer, dann neues Bild
        fenster.parent.picmain.document.Bild.src=BildX;
        }                // IE ok, Netscape kein neues Pic!
        }

        musst du aufsplitten, einmal in popWup, darein kommt der Teil, der das Fenster öffnet und eine neue Funktion, die per <body onload="..."> in dem Popup (picmain-Frame) geöffnet wird.

        Ungetestet und garantiert verbesserungsfähig:

        var fenster;
        var pic;
        function popWup(DokName,FensterName,Attribute,BildX) {
        fenster = window.open(DokName,FensterName,Attribute);
        fenster.focus(); // bis hierher alles ok
        pic = BildX; //Bild-Name wird in Variable gepackt, um später drauf zuzugreifen
        }

        Und jetzt die Bildwechsel-Funktion (im Popup):

        function Bildwechsel(){
        if (top.opener.pic!='') { // ungleich leer, dann neues Bild
        document.Bild.src=top.opener.pic;
        }                // IE und Netscape hoffentlich neues Pic!
        }

        Und das <body>-Element des Popups: <body onload="Bildwechsel();">

        Hoffe, dass es so klappt.

        Gruß

        mdkiller

        1. Hallo Bruno!

          function Bildwechsel(){
          if (top.opener.pic!='') { // ungleich leer, dann neues Bild
          document.Bild.src=top.opener.pic;
          }                // IE und Netscape hoffentlich neues Pic!
          }

          Und das <body>-Element des Popups: <body onload="Bildwechsel();">

          Hallo mdkiller,
          Klasse, wir sind einen großen Schritt weiter: Netscape funzt, IE nur mit "Behinderung".
          Habe alles so eingebaut, wie Du gepostet hast. Einzige Änderung ist "document.pictxt." vor "Bild.src", sonst frisst es Netscape nicht. IE geht nur, wenn der alert aktiviert wird. Hast Du dafür 'ne Erklärung?

          function Bildwechsel() {
            if (top.opener.pic!='') {
             //alert(top.opener.pic);
             document.pictxt.Bild.src=top.opener.pic;
            }
           }

          Jedenfalls viele thx schon mal fürs Helfen!

          Gruß
          Bruno

          1. Hallo Bruno!

            function Bildwechsel(){
            if (top.opener.pic!='') { // ungleich leer, dann neues Bild
            document.Bild.src=top.opener.pic;
            }                // IE und Netscape hoffentlich neues Pic!
            }

            Und das <body>-Element des Popups: <body onload="Bildwechsel();">

            Hallo mdkiller,
            Klasse, wir sind einen großen Schritt weiter: Netscape funzt, IE nur mit "Behinderung".
            Habe alles so eingebaut, wie Du gepostet hast. Einzige Änderung ist "document.pictxt." vor "Bild.src", sonst frisst es Netscape nicht. IE geht nur, wenn der alert aktiviert wird. Hast Du dafür 'ne Erklärung?

            function Bildwechsel() {
              if (top.opener.pic!='') {
               //alert(top.opener.pic);
               document.pictxt.Bild.src=top.opener.pic;
              }
             }

            Jedenfalls viele thx schon mal fürs Helfen!

            Gruß
            Bruno

            Hmmm, hab'n Nachtrag. Jetzt geht's auch mit dem alert im IE nicht mehr. Da ist irgendwas faul, wobei ich dem Netscape da mehr traue. Doch davon läuft es leider nicht in beiden Browsern. Hat noch wer 'ne Idee?

            Gruß
            bm

            1. Hallo Leute,

              hab's geschafft und hier die lauffähige Version für IE und NS.
              Mein besonderer Dank an mdkiller für's Anschieben!

              function Bildwechsel() {
              var Bildnummer = top.opener.picnr;
               if (typeof(Bildnummer) == "undefined") {
                Bildnummer = ""
                }
               if (Bildnummer != "") {
                document.Bild.src = Bildnummer;
               }
              }

              und im <body>-tag NICHT onLoad (das geht dem IE offenbar zu schnell...), sondern hinter den <img>-tag:

              <img name="Bild" border="0" src="../../../images/fotoalbum/default.gif" height="480">
              <script type="text/javascript">if (top.opener.picnr != '') { Bildwechsel()}</script>

              Die if-Abfrage hier muss sein, weil sonst, wenn kein Bild übergeben wurde, das default-pic nicht angezeigt wird.
              Klar, alles mal wieder Work-arounds und Stunden für die Katz, aber egal. Geht ja nun. Nochmals Dank in die Runde. Vielleicht kann ich mich ja irgendwann mal revanchieren.
              Gruß
              Bruno