Amit: Gleiches 2.tes Fenster, anderer Inhalt.

Hallo Allesamt!

Ich habe folgendes Problem:

Ich möchte ein Neues Fenster öffnen, damit der Surfer ein Thumbnail näher,
weil grösser, betrachten kann.

function oeffneFernbedienung()
{
   browserName=navigator.appName;
   browserVer=parseInt(navigator.appVersion);
   browserVerLang=navigator.appVersion;
   if (browserVer >= 3)
   {
      if (fernbedienung == null)
         fernbedienung = window.open('', '','width=270,height=270,toolbar=no,scrollbars=no,resizable=no');
      fernbedienung.location.href = "bildbig.htm";
      fernbedienung.focus();
   }
   else
      alert("Sorry, "+browserName+" in der Version "+browserVerLang+" ist der falsche Browser!");
}

Soweit, sogut ...

Auf anderen Seiten gibt es weitere kleine Bilder.
Nun soll ein erneuter klick kein neues Fenster öffnen, sondern eine andere HTML-Datei
mittels fernbedienung.location.href = "bild1big.htm";
in dem bereits geöffneten Fenster angezeigt werden.

if (fernbedienung == null) wirkt nicht.  :-(

Beim NS ist es OK, beim MSIE gibt es immer ein weites Fenster.

Kann mir jemand helfen?

Amit

  1. Du baust einfach noch ne Function hinzu:

    Function ChangeFernbedienung(Seite)
    {
          var Seite
          fernbedienung.location.href = Seite;
    }

    Im Code musst du das dann so aufrufen:

    <A HREF="javascript:ChangeFernbedienung('Seite.html');">Blabla-Bild</A>

    MfG Auer

  2. Hi!

    Dass das beim Netscape funktioniert, wundert mich ein bisschen, es sei denn Du hast schon irgendwo die Variable fernbedienung mit null initialisiert, so ungefaehr:
        var fernbedienung = null;   // ausserhalb der Funktion oeffneFernbedienung() !!

    Ansonsten kannst Du auch einfach
        if (!fernbedienung)
    statt
        if (fernbedienung == null)
    abfragen. Das hat den Vorteil, dass auch undefined (wenn Variable noch nicht deklariert/initialisiert wurde) zur Ausfuehrung des if-Zweiges fuehrt.

    Des weiteren ist es ratsam zu pruefen, ob das bereits geoeffnete Fenster vom Benutzer wieder geschlossen wurde. Die Variable fernbedienung aendert sich dadurch naemlich keineswegs. Also:
        if ((!fernbedienung) fernbedienung.closed) fernbedienung = window.open(...);

    window.focus() gibt es uebrigens erst seit JavaScript1.2, also nicht wundern, wenn aeltere Browser Fehler bringen.

    Calocybe

    1. Hi!

      Hallo!

      Dass das beim Netscape funktioniert, wundert mich ein bisschen, es sei denn Du hast schon irgendwo die Variable fernbedienung mit null initialisiert, so ungefaehr:
          var fernbedienung = null;   // ausserhalb der Funktion oeffneFernbedienung() !!

      Hab ich!

      Ansonsten kannst Du auch einfach
          if (!fernbedienung)
      statt
          if (fernbedienung == null)
      abfragen. Das hat den Vorteil, dass auch undefined (wenn Variable noch nicht deklariert/initialisiert wurde) zur Ausfuehrung des if-Zweiges fuehrt.

      Des weiteren ist es ratsam zu pruefen, ob das bereits geoeffnete Fenster vom Benutzer wieder geschlossen wurde. Die Variable fernbedienung aendert sich dadurch naemlich keineswegs. Also:
          if ((!fernbedienung) fernbedienung.closed) fernbedienung = window.open(...);

      Sehr gut, werde ich einbauen!

      window.focus() gibt es uebrigens erst seit JavaScript1.2, also nicht wundern, wenn aeltere Browser Fehler bringen.

      Kann man vorher abfragen, also innerhalb des Scriptes, ob der Browser des Surfers JS 1.2 beherrscht? Dann könnte man ggf. dieses Statment übergehen.

      Calocybe

      Vielen Dank!
      Amit

      1. Hi!

        window.focus() gibt es uebrigens erst seit JavaScript1.2, also nicht wundern, wenn aeltere Browser Fehler bringen.

        Kann man vorher abfragen, also innerhalb des Scriptes, ob der Browser des Surfers JS 1.2 beherrscht? Dann könnte man ggf. dieses Statment übergehen.

        Klar doch. Gib als LANGUAGE-Attribut im <SCRIPT>-Tag nicht "JavaScript" an, sondern "JavaScript1.2". Einige Browser fuehren aber ohne Gnade auch diesen JS-Code fuer hoehere Versionen aus, obwohl sie diese Version gar nicht beherrschen.

        Es gibt hier eine bessere Loesung, naemlich abzufragen, ob es die focus()-Methode gibt. Das geht, indem man focus ohne Klammern hinschreibt. Dadurch wird die Funktion nicht aufgerufen, sondern nur ein Wahrheitswert erzeugt, der angibt, ob die Methode existiert. Kurzum:
            if (window.focus) fernbedienung.focus();
        Existiert focus nicht, wird der if-Zweig nicht ausgefuehrt.

        Leider ist auch diese Methode nicht 100% sicher. Mit dem IE4 hatte ich auf diese Weise schon mal eine sinnlose Fehlermeldung produziert. (Aber der kann ja sowieso nicht richtig JavaScript... *huhu Patrick lol*)  Trotzdem ist dieser Weg nach meiner Einschaetzung weitaus verlaesslicher als JavaScript1.2 anzugeben.

        Calocybe

        1. Supi, und nochmals Danke!
          Amit