Calocybe: Fenster wieder neu öffnen

Beitrag lesen

Hi!

Die Javscript-Funktion sieht dann so aus:

function fehler() {
»»  if ((fehler == null) (fehler.self==null)) {

'fehler' ist zu diesem Zeitpunkt die Referenz auf die Funktion fehler() (vgl.
    <../../sfarchiv/1999_3/t05169.htm#a25106>), und da diese Funktion existiert,
    ist die Referenz niemals null. 'fehler.self' bedeutet die self-Eigenschaft der Referenz
    auf eine Funktion und sollte eigentlich einen Fehler verursachen. Allerdings ist ja die erste
    Bedingung immer true, sodass die zweite hinter dem gar nicht ausgewertet wird.

fehler=window.open("", "fehler", width=250,height=250,left=300,top=320");

Aber spaetestens jetzt sollte es doch einen JS-Fehler geben, denn der Name 'fehler' ist
    ja schon vergeben.

»»  }
»»  if(fehler.focus !=null) fehler.focus();

Hier versuchst Du ja auch die Existenz einer Funktion zu pruefen, indem Du die
    Referenz auf diese auswertest.

»»  fehler.location.href="fehler.html";

Warum nicht gleich den Dateinamen bei window.open() angeben?

}

Deine Probleme haben mehrere Ursachen, besonders die gleichen Bezeichnungen: fehler als Fenster-, Funktions- und Variablenname. Diese müssen geändert werden.

Richtig. Allerdings kann der Fenstername rihig so bleiben, da er in einem voellig anderen "Namensraum" (das heisst wirklich so, bzw. richtiger: name space) existiert und nichts mit der JS-Variable zu tun hat, die die Referenz auf das Fenster aufnehmen soll.

Du kannst dir die Abfrage nach dem Fenster sparen,

Statt dessen immer window.open() geht natuerlich auch. Nur wird doch da die Datei - entsprechende Cachesettings vorausgesetzt - immer neu vom Server geladen, oder? Es ist schon sauberer, erst auf Existenz zu pruefen und dann je nach Ergebnis window.open() window.focus() durchzufuehren. Dann muss man jedoch auch mit window.closed ueberpruefen, ob das Fenster bereits wieder durch den Benuzter geschlossen wurde (<../../tecb.htm#a2>).

Das ergibt dann diesen Code:

var fehlerwin = null;

function fehler() {
        if (fehlerwin && (!fehlerwin.closed)) {
            fehlerwin = window.open("fehler.html", "fehler", "width=250,height=250,left=300,top=320");
        } else {
            if (window.focus) fehlerwin.focus();
        }
    }

Ich hab mal absichtlich den Namen des Fensters wieder auf "fehler" gesetzt, um zu verdeutlichen, dass das kein Problem macht.

Das setTimeout ist für den IE5. Seit ich den installiert habe, fokusiert er bei mir ein Fenster nur noch mit einer Warteschleife.

&@^#*@( ???  Na gut, dann die eine Zeile eben umaendern in
    if (window.focus) setTimeout("fehlerwin.focus();", 40);
Und da regen sie sich immer ueber die Netscape-Bugs auf...

Aufruf: <a href="JavaScript:fehler('fehler.htm')">Link</a>

Vorsicht! An dieser Stelle nie das Semikolon vergessen! Siehe <../../sfarchiv/1999_3/t04978.htm>.

Calocybe