Hi,
ich hab grad ne halbe "Ewigkeit" einen Fehler in Opera gesucht.
Eigentlich ganz simples Ding.
var win = null;
//irgendwann später:
if (!win || win.closed)
win = window.open("about:blank", "bla");
//irgendwann später:
if (!win || win.closed)
win = window.open("about:blank", "bla");
Also, jedesmal, wenn das Fenster benötigt wird, wird geprüft, ob es überhaupt noch nicht angelegt wurde (!win) oder falls es schon angelegt wurde, ob es geschlossen wurde.
Funktionierte so auch in den relevanten Browsern (Uralt-Browser wie NS 4.x scheiden schon vorher aus, das ist Absicht) IE 5.0, 5.5, 6.0, Firefox 1.0.7, Mozilla 1.7, Opera 7.54.
Opera 8.02 und 8.5 weigerten sich aber, das Fenster wieder zu öffnen, nachdem ich es geschlossen hatte.
Also die Werte mal ausgegeben:
alert(!win + " " + win.closed)
[object] false
solange das Fenster noch existiert. Alles normal.
Aber wenn das Fenster geschlossen war, kam nicht das erwartete
[object] true
sondern das vollkommen unerwartete
[object] undefined
Da undefined im boolean-Kontext wie false zählt, kann win.closed im Opera 8.02/8.54 nie true werden.
Gelöst hab ich das jetzt erstmal per
if (!win || (win.closed !== false))
win = window.open("about:blank", "bla");
Ist das jetzt mein Fehler, daß ich bei geschlossenem Fenster den Wert true bei win.closed erwartet habe oder ist es ein Fehler in den neueren Operas, daß dort undefined statt true kommt?
SELFHTML (http://de.selfhtml.org/javascript/objekte/window.htm#closed) gibt mir recht:
closed
Speichert, ob ein Fenster, das zum Beispiel mit open() neu geöffnet wurde, mittlerweile geschlossen wurde. Hat den Wert true, wenn das Fenster geschlossen wurde.
Ist ja schön, daß der Opera jetzt kostenlos ist. Aber solche Fehler sollten eigentlich nicht sein. Und in Opera 7.54 geht's ja auch noch ...
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.