Der Martin: window.open ohne [object Window]

Beitrag lesen

Hallo Tommi,

[...] gleichzeit erscheint im Ursprungsframe die Meldung [object Window] und der Inhalt ist futsch.

Klar. Das hast du ja auch so bestellt.
Denk doch mal nach: Beim Anklicken eines Links versucht der Browser, das mit href="..." angegebene Verweisziel im aktuellen Fenster darzustellen (wenn jetzt wir mal die Möglichkeit eines target-Attributs außer acht lassen). Und was ist das Ergebnis deines Javascript-Statements im href? Genau: Eine Referenz auf ein window-Objekt. Genau das zeigt dir dein Browser ja auch an. Dass bei dieser Aktion noch ein zusätzliches Fenster geöffnet wurde, ist formal nur ein Nebeneffekt.

Was muss ich tun damit der Frame so bleibt wie er ist.

Erstens solltest du deinen Scriptaufruf nicht im href-Attribut unterbringen, sondern besser in einem onclick-Handler.
Zweitens ist es wichtig, eine Alternative für Besucher anzubieten, die JS deaktiviert haben. Für die könnte man einen ganz "normalen" Link machen. Kombiniert könnte das dann etwa so aussehen:

<a href="xxx.jpg" target="_blank" onclick="return (window.open('xxx.jpg' ,'Bild','width=800,height=600,scrollbars=no')==null);">

Wenn JS deaktiviert ist, wird der onclick-Handler komplett ignoriert und stattdessen wird das Linkziel xxx.jpg in einem neuen Fenster geöffnet (wegen target="_blank"). Dieses neue Fenster hat zwar dann nicht die Größe und die Eigenschaften, die du gern hättest, aber die Funktion bleibt grundsätzlich erhalten.

Bei aktiviertem JS wird der onclick-Handler ausgeführt. Also zuerst die window.open-Methode, die versucht, ein neues Fenster mit vorgegebenen Eigenschaften zu öffnen. Gelingt das, ist der Rückgabewert von window.open() ungleich null, das Ergebnis des Vergleichs mit null liefert also false. Dadurch wird die weitere Auswertung des Links unterdrückt. Schlägt das Öffnen des Fensters fehl (etwa durch einen Popup-Blocker), liefert window.open() null, der Vergleich ergibt true - und das bewirkt, dass der eigentliche Link (das href) doch noch ausgewertet wird. Damit hat der Benutzer wenigstens noch die Basisfunktion wie ohne JS.

Das hättest du aber alles auch durch einen Streifzug durchs Forumsarchiv selber finden können.

Schönen Tag noch,

Martin