Utz Grimminger: Handhabung von undefinierten Variablen in älteren Browsern?

Liebes Forum,

ich habe mir gerade ein JS abgequält, bei dem ich ein paar Fallen sehe, über die manche (ältere) Browser stolpern könnten.
Da ich im Augenblick nur IE 4 und NS 4.6 zur Verfügung habe, einfach mal die Frage in die Runde, ob mein Script evtl. die von mir befürchteten Probleme hervorrufen könnte.

Es dreht sich um ein Script zur Überprüfung, ob ein Zweitfenster geöffnet oder geschlossen und es je nachdem zu öffnen oder nen Focus draufzusetzen. Das ist das Script:

<SCRIPT LANGUAGE="JavaScript">

var koepenick;
var treptow;

function altstadt()
{
    if(koepenick && koepenick.closed == false) koepenick.focus();
    else koepenick = window.open("plan.htm","Koepenick","toolbar=no,width=465,height=518,left=5,top=5");
}

function park()
{
   if(treptow && treptow.closed == false) treptow.focus();
   else treptow = window.open("plantre.htm","Treptow","toolbar=no,width=465,height=518,left=5,top=5")
}

</SCRIPT>

Das Script funzt mit IE 4 und NS 4.6 prima, aber hier sind die Probs, die ich mir vorstellen könnte:

1. Die Variablen musste ich oberall der Funktion definieren; sie werden als "undefiniert" geführt, bis sie im "else"-Teil gefüllt werden. Die Existenzabfrage im "if" führt erst mal dazu, dass das Objekt als nicht existent gemeldet wird. ABER: Ich könnte mir vorstellen, dass irgendwelche JS-Interpreter die Variablen-Definition zum Anlass nehmen, die "if"-Anfrage mit "ja" zu beantworten und dann zu meckern, dass die ".closed"-Eigenschaft nicht zum Objekttyp passt.
2. Wenn das Zweitfenster geschlossen wird, bleibt die Variable trotzdem definiert (deswegen überhaupt erst die Bedingungsverknüpfung). Hier befürchte, dass manche JS-Interpreter beim Schließen des Fensters die Variablren-Definition löschen. Das Script dürfte trotzdem machen, was es soll, aber ich frage mich, ob so was vorkommen kann...

Also, wenn jemand zu den Fragen irgendwas weiß, wäre ich um Antworten dankbar.
Falls wer ältere Browser installiert sowie Zeit & Lust hat, das ganze auszuprobieren: die Testversion steht unter http://www.berlin-suedost.de/spielwiese/index.htm - dort dann auf eines der Stadtplansymbole klicken. Auch hier wäre ich über Erfahrungsmitteilungen sehr dankbar. Ach ja: die Bildwechselfunktion in den Stadtplänen funzt mit NS 2 und IE 3 nicht.

Danke für Tipps & Testen!

Grüße,

Utz

  1. Hallo,

    wenn du das fenster selbst schießt, kannst du auch die Variable zurücksetzen, ansonsten (wenn es der user schließt) sollte die Abfrage
      if (windowvar)
    false ergeben.

    Probs wirst du sicherlich mit window.focus() bekommen,da dies erst ab den 4er Browser unterstützt wird.

    Angaben ohne Gewehrr und sonstigen Schusswaffen
    CirTap

  2. Hi Utz!

    1. Die Variablen musste ich oberall der Funktion definieren; sie werden als "undefiniert" geführt, bis sie im "else"-Teil gefüllt werden. [...] ABER: Ich könnte mir vorstellen, dass irgendwelche JS-Interpreter die Variablen-Definition zum Anlass nehmen, die "if"-Anfrage mit "ja" zu beantworten und dann zu meckern, dass die ".closed"-Eigenschaft nicht zum Objekttyp passt.

    Kein Sorge, das wird nicht vorkommen. In JS ergeben die Werte undefined, null und 0 ein logisches false, alles andere ist true.

    1. Wenn das Zweitfenster geschlossen wird, bleibt die Variable trotzdem definiert (deswegen überhaupt erst die Bedingungsverknüpfung). Hier befürchte, dass manche JS-Interpreter beim Schließen des Fensters die Variablren-Definition löschen. Das Script dürfte trotzdem machen, was es soll, aber ich frage mich, ob so was vorkommen kann...

    Nein, kann es nicht. Die Erklaerung ist mir jetzt ehrlich gesagt zu langwierig.

    Du hast aber ein anderes Problem. Aeltere Browser unterstuetzen die focus-Methode nicht. Du kannst an der Stelle also einen JS-Error erhalten. Deshalb musst Du deren Existenz noch zusaetzlich pruefen:

    function altstadt() {
        if (koepenick && !koepenick.closed && koepenick.focus) koepenick.focus();
        else koepenick = window.open("plan.htm","Koepenick","toolbar=no,width=465,height=518,left=5,top=5");
    }

    Ich denke, wenn focus() nicht zur Verfuegung steht, ist ein Neuoeffnen des Fensters ein akzeptabler Workaround.

    Falls wer ältere Browser installiert sowie Zeit & Lust hat, das ganze auszuprobieren: die Testversion steht unter http://www.berlin-suedost.de/spielwiese/index.htm - dort dann auf eines der Stadtplansymbole klicken. Auch hier wäre ich über Erfahrungsmitteilungen sehr dankbar. Ach ja: die Bildwechselfunktion in den Stadtplänen funzt mit NS 2 und IE 3 nicht.

    Mit dem IE3 oeffnen sich bei mir die Popups ueberhaupt nicht. Unterstuetzt der javascript:-Links etwa noch nicht? Naja, vielleicht ist es auch bloss ein Fehler in meiner Installation, die ist sowieso ziemlich im Arsch. Aber vielleicht probierst Du es trotzdem mal mit <A HREF="(direktlink nach plan.htm fuer non-JS-Browser?)" OnClick="altstadt();">. Mit NS2 kommt der oben angesprochene Fehler mit focus().

    Die ganze Seite sieht uebrigens sehr gut aus, insbesondere gefallen mir die OnMouseOvers in den Popups. Nur den grossen leeren Bereich auf der Hauptseite finde ich etwas komisch. Anhand des Sources ist mir aber auch nicht ganz klar, wo der herkommt, und er ist nur in den Netscapes zu sehen (Versionen 2, 3 und 4), nicht im IE3. Mit dem IE2 kann man auf diesen Webserver nicht zugreifen, da er noch kein ausreichend modernes HTTP kann.

    Calocybe

    1. Moin Utz,
      moin Calocybe,

      Mit dem IE3 oeffnen sich bei mir die Popups ueberhaupt nicht. (...) Naja, vielleicht ist es auch bloss ein Fehler in meiner Installation, die ist sowieso ziemlich im Arsch.

      Kann gut sein. Mit IE 3.02 (unter NT) öffnen sich bei mir die Popups ohne Probleme - nur schließen muss ich sie "per Hand".

      Die ganze Seite sieht uebrigens sehr gut aus, insbesondere gefallen mir die OnMouseOvers in den Popups. Nur den grossen leeren Bereich auf der Hauptseite finde ich etwas komisch.

      dito

      Swen

    2. Hi Calocybe,

      danke für Checken, Tipps und Hinweise erst mal!

      Mit dem IE3 oeffnen sich bei mir die Popups ueberhaupt nicht. Unterstuetzt der javascript:-Links etwa noch nicht? (...)

      Hat Dein IE3 jemals JavaScript gemacht? Es gab eine Subversion, die konnte gar kein JS, vielleicht hast Du die erwischt. Falls nicht, weiß ich auch nicht.

      Die ganze Seite sieht uebrigens sehr gut aus, insbesondere gefallen mir die OnMouseOvers in den Popups. Nur den grossen leeren Bereich auf der Hauptseite finde ich etwas komisch (...)

      Danke für's Lob, und das mit der Gestaltung...äähhh...ich nehme meine JS-Basteleien immer erst mal in meinen "Spielwiesen"-Bereich, in dem alles mögliche ausprobiert wird, während die eigentl. Site parallel weiterläuft. Das "Design" kommt daher: der Kunde wollte es partout im Spaltensatz, und hier geht's nur drum, ihm zu zeigen, dass es sch**** aussieht. Falls es Dich interessiert: das "richtige" Design gibt's unter http://www.berlin-suedost.de/, dort über "Quick Guide", "Kultur" oder "Köpenick-Treptow" zu den "Sehenswürdigkeiten" durchklicken.

      Nochmal Danke!

      Grüße,

      Utz