Simon: Ist ein Fenster offen?

Wie kann ich überprüfen, ob ein mit JavaScript erstelltes Fenster offen ist?
Vielen Dank für alle Antworten
              Simon

  1. Hallo!
    Es gibt eine Eigenschaft closed() (siehe <../../tecb.htm#a2>). Das Problem ist nur, dass es eine Fehlermeldung gibt, sobald du überprüfen willst, ob ein Fenster, das noch nicht geöffnet bzw. erstellt wurde. Christine hat hierzu einen "Trick" im Source-Code von http://screenexa.net/js_notiz/tips/image.htm und zwar bei der Funktion "zu()". Find ich gut gelöst...
    Viele Grüße,
    Alexander

  2. Wie kann ich überprüfen, ob ein mit JavaScript erstelltes Fenster offen ist?
    Vielen Dank für alle Antworten
                  Simon

    zur grundlegenden bewaeltigung Deines problemes
    hier der quellcode von zwei seiten aus einem
    meiner projekte:

    die erste seite(quellcode_01) repraesentiert Deine
    home-site;
    die zweite seite(quellcode_02)wird in Dein fenster
    geladen, welches Du aufrufst, und ueber das Du die
    volle kontrolle behalten moechtest;

    die steuerung Deines fensters erfolgt ausschlies-
    slich durch funktionen, die mit dem aufruf Deiner
    homepage geladen werden - diese scripte kannst Du
    im ersten <frame> eines einfachen zwei-spaltigen/
    zeiligen <frameset>s..[0,*]..plazieren - das wurde
    im ersten quellcode-beispiel so realisiert - der
    0-frame heisst dort top.SCRIPTE und enthaelt den
    ersten quelltext.
    Du darfst den <frameset> aber auch ruhig weglassen

    • dann solltest Du aber den aufruf der funktion
      CHECK_MY_FRAMES() im <BODY...> weglassen - diese
      funktion dient nur dazu, ein aufrufen der scripte
      in einer falschen umgebung(z.B.: falsche oder
      keine frames) zu unterbinden...

    diese seite enthaelt also zwei globale variablen,
    die Dir das steuern Deines fensters ermoeglichen -
    ich nenne das fenster einmal BEGLEITER_WINDOW, und
    die variablen heissen in meinem fall zum einen
    var BEGLEITER_Fenster = null;  und zum anderen
    var begleiter_fenster = false; -
    warum ich zwei variablen zur kontrolle benutze,
    werde ich gleich erklaeren:
    *BEGLEITER_Fenster steht fuer Dein fenster-objekt,
    *begleiter_fenster ist Dein persoenlicher aufpas-
    ser - weshalb:
    wenn ein fenster ueber den [x]-knopf geschlossen
    wird,verlierst Du die kontrolle ueber die variable
    BEGLEITER_Fenster..das fenster ist geschlossen,die
    variable ist aber unter umstaenden trotzdem nicht
    auf null zurueckgesetzt - ein schwerwiegendes pro-
    blem, da Diese variable das fenster mit der open-
    methode geoeffnet hat ... also um die ecke denken
    und ein zweites script mit einer kontrollinstanz
    einfuehren ... dieses script (quellcode_02) wird
    um und in den inhalt eines jeden dokuments gebaut,
    welches in Deinem fenster geoeffnet werden soll;

    die funktion  self.CHECK_mySELF() und die variable
    i_am_ok sind wichtig, wenn Du schoen scripten
    moechtest - das script verhindert die anzeige
    des fensterinhaltes in allen anderen browserfen-
    stern, die nicht ueber Deine scripte geoeffnet
    wurden und teilt Deinem persoenlichen aufpasser
    ueber "opener.begleiter_fenster=true;" ganz offi-
    iell mit, dass Dein Fenster (und das macht nur mit
    inhalt sinn) existiert ... beim schliessen des
    fensters (egal ob ueber script oder mit [x]) ver-
    liert Dein kontrolleur jegliches interesse an
    einem fenster -"opener.begleiter_fenster=false;"-
    und zur doppelten absicherung wird dabei auch
    opener.BEGLEITER_Fenster auf null gesetzt;

    tritt der unglueckliche zufall ein, dass bei einer
    schlechten netzanbindung Dein gerade geoeffnetes
    fenster -noch voellig schutzlos(ohne inhalt)-
    geschlossen wird-[x]-, hast Du jetz ueber die zwei
    variablen und ueber das anwenden von logischen
    verknuepfungen die moeglichkeit, doch noch den
    wahren status Deines fensters in erfahrung zu
    bringen.

    fazit:
    die beantwortung Deiner frage, fuehrte zu einem
    ausfuehrlicheren rundumschlag als ich es selber
    je angenommen haette;
    liess die scripte, verstehe diese, wende Sie an
    und veraendere sie fuer Deine zwecke;

    die scripte:
    *quellcode_01

    <!doctype html public "-//W3C//DTD HTML 3.2//EN">
    <HTML>

    <HEAD>
    <TITLE>scripte.htm</TITLE>
    <!--
    SCRIPTE.HTM  //
        //
        //
    scripte.htm  //  fuer browser, die
        //  das IMAGEobjekt
        //  verstehen koennen
        //
    supported and programmed by peter seliger 1998

    questions to and requests for JavaScript-stuff  
    will be recognized through/by pseliger@gmx.net  
    

    -->
    <script language="JavaScript">
    <!--
    function CHECK_MY_FRAMES()
      {
      if (top.frames.length == 2)
       {
       if ((top.frames[0].name == "SCRIPTE") && (top.frames[1].name == "INHALTE"))
        {
        return;
        }
       else
        {
        ...bla

    ...platz fuer individuelle fehlerbehandlung z.B.:
         alert(...deine individuelle fehlermeldung...)

    ...bla
        }
       }
      else
       {
       ...bla

    ...platz fuer individuelle fehlerbehandlung z.B.:
        alert(...deine individuelle fehlermeldung...)

    ...bla
       }
      }

    var SCRIPTE\_RahmenFenster = self;	// SCRIPTE ist ein rahmen des TOP-windows,  
    

    // und jetzt "weiss" die variable dies auch  
    var BEGLEITER_Fenster = null;  // ist die fenster-variable, ueber die alle themen-fenster gesteuert werden
    var begleiter_fenster = false;  // ueberprueft, ob BEGLEITER_Fenster ueberhaupt existiert
    var begleiter_eigenschaften = ""; // enthaelt die fenster-eigenschaften fuer jedes thema
    var begleiter_adresse = "";  // enthaelt die documenten-adresse fuer die verschiedenen themen

    function IGNORIEREN()  
    

    {
      return true;
      }

    function BEGLEITER\_AUF()  
    

    {
      if ((!begleiter_fenster) (BEGLEITER_Fenster == null))
       {
       BEGLEITER_Fenster = window.open(begleiter_adresse,"BEGLEITER_WINDOW",begleiter_eigenschaften);

    if (BEGLEITER_Fenster.opener == null)
        {
        BEGLEITER_Fenster.opener = SCRIPTE_RahmenFenster;
        }

    top.SCRIPTE.BEGLEITER_Fenster.focus();
       MITTEILUNG_AUS();
       }
      else
       {
       top.SCRIPTE.BEGLEITER_Fenster.focus();
       }
      }

    function BEGLEITER\_ZU()  
    

    {
      if ((begleiter_fenster) && (BEGLEITER_Fenster != null))
       {
       top.SCRIPTE.BEGLEITER_Fenster.close();
       MITTEILUNG_AUS();
       }
      }

    function BEGLEITER\_FOCUS()  
    

    {
      if ((begleiter_fenster) && (BEGLEITER_Fenster != null))
       {
       top.SCRIPTE.BEGLEITER_Fenster.focus();
       }
      }
    //-->
    </script>
    </HEAD>

    <BODY topmargin="0" leftmargin="0" bgcolor="#000000" bgproperties="fixed" text="#000000" link="#000000" vlink="#000000" alink="#000000"
    onerror="self.IGNORIEREN()"
    onload="self.CHECK_MY_FRAMES()...und weitere aktionen/funktionen"
    onunload="self.BEGLEITER_ZU()...und weitere aktionen/funktionen">

    ...wenn diese seite nicht in einem <frame> steht,
    ...dann kommt hier Dein seiteninhalt samt den
    ...funktionsaufrufen hinein:
    ...z.B.: onAction = "self.BEGLEITER_AUF()"

    ...ausserdem solltest Du die nicht mehr benoetigte
    ...funktion  CHECK_MY_FRAMES() loeschen und deren
    ...aufruf durch onload unterbinden

    </BODY>
    </HTML>

    *quellcode_02

    <!doctype html public "-//W3C//DTD HTML 3.2//EN">
    <HTML>

    <HEAD>
    <META NAME="DESCRIPTION" CONTENT="...">
    <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html;CHARSET=iso-8859-1">
    <META HTTP-EQUIV="KEYWORDS" CONTENT="...">
    <META NAME="AUTOR"  CONTENT="peter seliger">

    <TITLE>...z.B.: dein navigationsfenster / Inhaltsverzeichnis</TITLE>
    <!--
    BEGLEITER.HTM  //
        //
        // begleiter.htm
         // fuer browser, die
        // das IMAGEobjekt
        // verstehen koennen
        //
    supported and programmed by peter seliger 1998

    questions to and requests for JavaScript-stuff  
    will be recognized through/by pseliger@gmx.net  
    

    -->
    <script language="JavaScript">
    <!--
    var i_am_ok = null;  // noch nicht definiert

    if (opener)  
    

    {
      i_am_ok = true;
      }
    else    // werte jetzt zugewiesen
      {
      i_am_ok = false;
      }

    // var dieser_bg = "";
    //
    // if (navigator.appName == "Microsoft Internet Explorer")
    //  {
    //  dieser_bg = "../bilder/bg.jpg";
    //  }
    // else
    //  {
    //  dieser_bg = "../bilder/bg_rand.gif";
    //  }

    function IGNORIEREN()  
    

    {
      return true;
      }

    function CHECK\_mySELF()  
    

    {
      if (i_am_ok)
       {
       opener.begleiter_fenster=true;

    ...bla

    ...bla

    ...bla
       }
      else
       {
       ...bla

    ...platz fuer individuelle fehlerbehandlung z.B.:
        alert(...deine individuelle fehlermeldung...)

    ...bla
       }
      }
    //-->
    </script>
    </HEAD>

    <BODY topmargin="0" leftmargin="0" bgcolor="#E67300" background="../bilder/bg_rand.gif" bgproperties="fixed" text="#ffffff" link="#008080" vlink="#008080" alink="#ff0000"
    onerror="self.IGNORIEREN()"
    onfocus=...deine individuellen aktionen/funktionen...
    onload="self.CHECK_mySELF()"
    onunload="if(i_am_ok){opener.BEGLEITER_Fenster=null;opener.begleiter_fenster=false;}">

    ...bla

    ...platz fuer individuellen fensterinhalt

    ...bla

    </BODY>
    </HTML>

    viel vergnuegen und by(t)e by(t)e pseliger@gmx.net