MudGuard: Opera ab 8.0 und window.closed

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.
  1. Hi,

    Also die Werte mal ausgegeben:
    alert(!win + " " + win.closed)

    [...]

    [object] undefined

    interessant. Kannst Du Dir mal die Eigenschaften von win ausgeben lassen? Es scheint hier plötzlich zu einem nicht-Window-Objekt zu werden. Auch typeof(win) wäre hilfreich.

    Ist das jetzt mein Fehler, daß ich bei geschlossenem Fenster den Wert true bei win.closed erwartet habe

    Nein, das hätte ich ebenfalls erwartet.

    Ist ja schön, daß der Opera jetzt kostenlos ist. Aber solche Fehler sollten eigentlich nicht sein.

    Bei Opera gibt es mir zu viele Fehler, die in die Kategorie "unnötig" fallen. Deswegen kommt das Ding für mich als Nutzbrowser auch nicht in Frage - obwohl es über ein hinreichendes Maß an Genialität verfügt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      interessant. Kannst Du Dir mal die Eigenschaften von win ausgeben lassen? Es scheint hier plötzlich zu einem nicht-Window-Objekt zu werden. Auch typeof(win) wäre hilfreich.

      alert(typeof(win)) ist object, egal, ob das Fenster noch offen ist oder schon geschlossen.
      alert(win) ergibt [object Window] bei noch offenem Fenster, [object Object] nach dem Schließen.

      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.
      1. Hi,

        alert(typeof(win)) ist object, egal, ob das Fenster noch offen ist oder schon geschlossen.

        schade.

        alert(win) ergibt [object Window] bei noch offenem Fenster, [object Object] nach dem Schließen.

        Das unterstützt meine Vermutung, dass sich das Objekt verändert. Über welche Eigenschaften verfügt es?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          Das unterstützt meine Vermutung, dass sich das Objekt verändert. Über welche Eigenschaften verfügt es?

          Wenige:
          for (property in win)
          {
             alert(property);
          }
          erzeugt bei geschlossenem Fenster keinen einzigen Alert.

          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.
  2. Opera 8.02 und 8.5 weigerten sich aber, das Fenster wieder zu öffnen, nachdem ich es geschlossen hatte.

    Das Problem hatt ich vor einigen Wochen auch schon.
    http://forum.de.selfhtml.org/archiv/2005/7/t112177/#m708971

    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");

    
    >   
      
    ich hab's in etwa so gelöst:  
    ~~~javascript
    if(!showFenster || showFenster.closed ||  
        typeof showFenster.closed == 'undefined' // Opera 8 Bugfix  
        ) showFenster = wondow.open(....);
    

    Struppi.

    1. Hi,

      ) showFenster = wondow.open(....);[/code]

      Muß das nicht Taekwondow.open heißen ;-) ;-) ;-)

      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.