Dogfish: GeP (ganz einfaches Problem): Ist Fenster offen?

Hallo ihr da draußen,

Ich habe ein gaaanz einfaches JavaScript-Problem. Ich will überprüfen, ob ein Fenster geöffnet ist, wenn nicht dann will ich es öffnen. Ich dachte an so was:

if(!meinfenster)
 open("inhalt.html", "meinfenster");

Nur das funktioniert nicht, da öffnet er das Fenster immer. In SelfHTML hab ich zu dem Thema auch irgendwie nix gefunden, da gibt es ja bei der Referenz keine Kategorie "meinfenster" d;-)==>

Weiß jemand Rat?

Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de),
Dogfish

--
Let's close our eyes and see what happens
(http://dogfish.net.tc / http://dogfishus.net.tc)
  1. Hallo Dogfish,

    if(!meinfenster)
    open("inhalt.html", "meinfenster");

    wn = null;

    function wnopen() {
      if(!wn || wn.closed) {
        wn = window.open("inhalt.html","meinfenster","...");
    }

    Steht alles in SELF, JS-Objektreferenz,
    Eigenschaften eines window-Objekts.

    Gruesse,
     CK

    1. Hallo ihr da draußen,

      Steht alles in SELF, JS-Objektreferenz,
      Eigenschaften eines window-Objekts.

      Ja, das hab ich schon gesehen. ich hab glaub ich vergessen zu erwähnen, dass sich die Seite, die das aufruft, regelmäßig aktualisiert. Und wenn sie sich aktualisiert hat, dann geht diese Möglichkeit nicht mehr.
      Ich schätze mal, ich muss den Window-Handle (oder wie er sonst heißt) irgendwie übertragen. Aber der ist doch ein Object, das kann ich doch nicht einfach so in die URL schreiben. Oder wie kann man das sonst machen?

      Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de),
      Dogfish

      --
      Let's close our eyes and see what happens
      (http://dogfish.net.tc / http://dogfishus.net.tc)
      1. Hallo Dogfish,

        Ja, das hab ich schon gesehen. ich hab glaub
        ich vergessen zu erwähnen, dass sich die
        Seite, die das aufruft, regelmäßig
        aktualisiert.

        *g* ja, hast du.

        Und wenn sie sich aktualisiert hat, dann geht
        diese Möglichkeit nicht mehr.

        Korrekt.

        Ich schätze mal, ich muss den Window-Handle
        (oder wie er sonst heißt) irgendwie
        übertragen.

        Ne, das geht nicht, weil...

        Aber der ist doch ein Object, das kann ich
        doch nicht einfach so in die URL schreiben.

        :)

        Oder wie kann man das sonst machen?

        Hm. Ich glaube nicht, dass das geht. Wirst wohl
        damit leben muessen, dass sich das Fenster neu
        laedt.

        Gruesse,
         CK

        1. gruss Christian, hallo Dogfish, hi struppi,

          Struppi schrieb:

          Wenn du dem Fenster immer den gleichen Namen gibst, sollte es sich nur einmal öffnen.

          Struppi hat recht;

          im folgenden beispiel wurde versucht,
             einen wuergaround ueber top.frames.length
             hinzubekommen, was leider zum scheitern
             verurteilt war  -  das ueber ein target-
             attribut zu referenzierende remote-fenster
             wird also in jedem fall geoffnet - nur:
             solange es existiert, faellt dies dem
             betrachter nicht auf  -  uebergibt man
             jetzt noch die entsprechende URL, sieht
             das ganze wie ein normaler seitenwechsel
             aus  -  beispiel:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>

          <head>
           <meta http-equiv="content-style-type" content="text/css" />
           <meta http-equiv="content-script-type" content="text/javascript" />
           <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
           <title>istFensterOffen.html</title>
           <script type="text/javascript">
           <!--
            urlArray = [["http://selfaktuell.teamone.de"],["http://selfhtml.teamone.de"],["about:blank"]];
            if (window.opera) {urlArray[2] = "opera:blank";}

          function openWindow(targetHref,targetName) {
             if (top.frames.length >= 1) {
              if (frames[targetName]) {
               alert("ein frame/fenster dieses namens existiert schon");
              } else {
               alert("else-zweig: frames["+targetName+"]");
               window.open(targetHref,targetName,"");
              }
             } else {
              alert("else-zweig: top.frames.length["+top.frames.length+"]");
              window.open(targetHref,targetName,"",true);
             }
            }
            function runApplication() {
             alert("top.frames.length = " + top.frames.length);
             if (frames.length >= 1) {
              var targetNames = "auf diese frame- bzw.\ntarget-namen kann\nzugegriffen werden:\n";
              for (var i=0;i<frames.length;i++) {
               targetNames += "\n" + frames[i].name;
              }
              alert(targetNames);
             }
             var randomNumber = Math.floor(Math.random()*3);
             randomNumber = ((randomNumber == 3) ? (2) : (randomNumber));

          openWindow(urlArray[randomNumber],"remoteWin");

          setTimeout("location.reload(true)",5500);
            }
           //-->
           </script>
           <style type="text/css">
           <!--
            body {
             margin-left : 0px;
             margin-top : 0px;
             margin-right : 0px;
             margin-bottom : 0px;
             font-family : verdana,geneva,helvetica,arial,sans-serif;
             font-size : 0.8em;
             color : #000000;
            }

          .floatLeft {float : left;}

          div.borderColumn {width : 20%;}
            div.contentColumn {width : 60%;}
           //-->
           </style>
          </head>

          <body onload="runApplication()" bgcolor="#f5f5f5" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
          <div id="content" name="content" style="width:100%">
           <div id="leftColumnt" name="leftColumnt" class="borderColumn floatLeft"> </div>
           <div id="middleColumn" name="middleColumn" class="contentColumn floatLeft">
            <br /><br /><br />
            Dogfish: (JAVASCRIPT) GeP (ganz einfaches Problem): Ist Fenster offen?<br />
            <br />
            Die folgende Nachricht zum Thema stammt von: Dogfish,  Candid.Dauth@web.de, 14. Dezember 2002, 13:55<br />
            http://dogfish-unstable.net.tc<br />
            <br />
            <br />
            Hallo ihr da draußen,<br />
            <br />
            Ich habe ein gaaanz einfaches JavaScript-Problem. Ich will überpr¨fen, ob ein Fenster geöffnet ist, wenn nicht dann will ich es öffnen. Ich dachte an so was:<br />
            <br />
            if(!meinfenster)<br />
              open("inhalt.html", "meinfenster");<br />
            <br />
            Nur das funktioniert nicht, da öffnet er das Fenster immer. In SelfHTML hab ich zu dem Thema auch irgendwie nix gefunden, da gibt es ja bei der Referenz keine Kategorie "meinfenster" d;-)==><br />
            <br />
            <br />
            Weiß jemand Rat?<br />
            <br />
            <br />
            Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de),<br />
            Dogfish<br />
            -- <br />
            Let's close our eyes and see what happens<br />
            <br />
            (http://dogfish.net.tc / http://dogfishus.net.tc)<br />
           </div>
           <div id="rightColumn" name="rightColumn" class="borderColumn floatLeft"> </div>
          </div>
          </body>

          </html>

          by(t)e by(t)e - peterS. - pseliger@gmx.net

          1. Struppi hat recht;

            :-) soweit so gut.

            Aber:

            urlArray = [["http://selfaktuell.teamone.de"],["http://selfhtml.teamone.de"],["about:blank"]];

            Ich weiss das solche Konstrukte auch in JS ich kenn sie von Perl. Diort ist dies ein Array of Arrays, das heißt um den 1. Wert anzusprechen müßtest du so referenzieren: urlArray[0][0], was ich aber für umständlich erachte, da du ja nur ein einfaches Array benutzt. Daneben frage ich mich, warum du nicht die althergebrachte schreibweise verwendest, da der Rest des Codes (soweit ich das sehe) auch in älteren Browsern funktioneren würde.

            Also:

            var urlArray = new Array("http://selfaktuell.teamone.de", "http://selfhtml.teamone.de", "about:blank");

            Struppi.

            1. gruss Struppi,

              urlArray = [["http://selfaktuell.teamone.de"],["http://selfhtml.teamone.de"],["about:blank"]];

              Ich weiss das solche Konstrukte auch in JS ich kenn sie von Perl.
              Diort ist dies ein Array of Arrays, das heißt um den 1. Wert
              anzusprechen müßtest du so referenzieren: urlArray[0][0],

              noe, dem ist nicht so:

              var myArray = new Array("abc","def",ghi");
              // ist aequivalent zu
                 var my Array = [["abc"],["def"],["ghi"]];

              // was Du meinst (var value = myArray[0][0];)
              // saehe konventionell so aus:
                 var myArray = new Array();
                 myArray[myArray.length] = new Array("01 abc","01 def","01 ghi");
                 myArray[myArray.length] = new Array("02 abc","02 def","02 ghi");
              // oder eben auch so:
                 var myArray = [[["01 abc"],["01 def"],["01 ghi"]],[["02 abc"],["02 def"],["02 ghi"]]];
              // in beiden faellen liefert myArray[0][0] den wert "01 abc" ..
              // ( .. myArray[0][2] liefert den wert "01 ghi" ..
              //   .. myArray[1][1] liefert den wert "02 def" .. )

              was ich aber für umständlich erachte, da du ja nur ein einfaches
              Array benutzt. Daneben frage ich mich, warum du nicht die
              althergebrachte schreibweise verwendest, da der Rest des Codes
              (soweit ich das sehe) auch in älteren Browsern funktioneren würde.

              die klammer-schreibweise funktioniert ab netscape 4.x, msie und
                 opera kommen damit wunderbar zurecht, mozillas sowiso - soll ich
                 den NNav 3.0 auch noch unterstuetzen  ?-)

              Also:

              var urlArray = new Array("http://selfaktuell.teamone.de", "http://selfhtml.teamone.de", "about:blank");

              ich bin da eben sehr flexibel;
                 je nach bedarf und laune benutze ich beide schreibweisen,
                 und das beispiel in diesem thraeds geht nun mal nicht auf
                 array-schreibweisen ein, sondern beschaeftigt sich mit dem
                 fenster-problem, waehrend die array-initialisierung hier nur
                 mittel zum zweck ist;

              Struppi.

              by(t)e by(t)e - peterS. - pseliger@gmx.net

              1. var myArray = new Array("abc","def",ghi");
                // ist aequivalent zu
                   var my Array = [["abc"],["def"],["ghi"]];

                Das stimmt nicht.
                Ich hab ein wenig rumgetestet.

                var myArray = [["abc"],["def"],["ghi"]];

                ist ein Array mit drei Elementen, die jewiels ein Array mit einem Element sind.

                Kurzes Beispiel:
                var myArray = [["abc"],["def"],["ghi"]];

                for(var i= 0; i < myArray.length;i++)
                {
                    alert(typeof myArray[i]);
                    // Du kanst hier auch die z.b.Länge des Arrray abfragen
                // Aber:
                    alert(myArray[i][0] == myArray[i]);

                }
                var myArray = ["abc","def","ghi"];
                for(var i= 0; i < myArray.length;i++)
                {
                    alert(typeof myArray[i]);
                }

                ergibt im ersten Falle dreimal 'object' im zweiten String.

                Allerdings ist in JS im ertsen Fall: myArray[i] idenstisch mit myArray[i][0]
                insofern führt deine Schreibweise hier zu keinen Fehler, ich würd mich da aber nicht drauf verlassen.

                Struppi.

                1. hallo Struppi,

                  Das stimmt nicht.
                  Ich hab ein wenig rumgetestet.

                  danke fuer's testen;

                  var myArray = ["abc","def","ghi"];

                  diese schreibweise habe ich tatsaechlich nie
                     ausprobiert - insofern habe ich seit 2 jahren
                     einfach nur glueck gehabt, denn keiner der von
                     mir getesteten js-faehigen browser hat jemals die
                     aus meinem unverstaendnis heraus falsch formulierten
                     zugriffe angemeckert;

                  vielen dank - peterS. - pseliger@gmx.net

      2. Ja, das hab ich schon gesehen. ich hab glaub ich vergessen zu erwähnen, dass sich die Seite, die das aufruft, regelmäßig aktualisiert. Und wenn sie sich aktualisiert hat, dann geht diese Möglichkeit nicht mehr.
        Ich schätze mal, ich muss den Window-Handle (oder wie er sonst heißt) irgendwie übertragen. Aber der ist doch ein Object, das kann ich doch nicht einfach so in die URL schreiben. Oder wie kann man das sonst machen?

        Wenn du dem Fenster immer den gleichen Namen gibst, sollte es sich nur einmal öffnen.

        Struppi.