Susann: Wertübergabe

Was bisher geschah:

::DAS PROBLEM::

»»Reload (bei NS4) deaktiviert mouseclick-Effekt (JavaScript) an der Menüleiste

HTML-Seiten sind vergesslich; nach einem Reload wird halt alles auf den Anfangszustand zurückgesetzt. Erhalten bleibt
aber der Fenstername. Und genau dort kannst du die Information über deinen ausgewählten Menüpunkt speichern und mit
onLoad dann wieder auslesen. Siehe Beitrag in Selfaktuell:
http://www.teamone.de/selfaktuell/wertueb.htm

Eine andere Möglichkeit wäre, diese Information über die URLs der Inhaltsseiten abzufragen.

Gruß,
Claus

NEUE NACHRICHT:

Vielen Dank für den Hinweis.
Bin bzgl. JS Programmier-Erfahrungen noch ziemlich unbedarft. Habe nach einer einwöchigen Lektüre eines dicken JS-Buches in zahlreichen Versuchen probiert das Prinzip der Wertübergabe (gemäss http://www.teamone.de/selfaktuell/wertueb.htm)
auf meine Menüleiste anzuwenden. Leider ohne Erfolg.
Das einzig erzielte Resultat ist ein konstantes reload der Menüpunkte kombiniert mit einem saftigen Absturz von NS4.
Es wäre sehr hilfreich, wenn mir jemand erklären könnte, was an dem Script nicht stimmt bzw. wie ich den Verlust des Javascript-Effekts in meiner Menüleiste bei Größenveränderung des Browserfensters verhindern kann. Vielen Dank³.
Susann

Hier ein Auszug aus meinem (gebastelten) Script:

<script language="JavaScript">
    <!--
function aufruf(selObj) {

self.name=selectWert(selObj);

self.location.href="navi.htm";

}

function selectWert(sObj) {
    
    return  document.layers['Layer1'].document.images[sObj];
}

// -->
</script>

<body onload="aufruf();return false">

(Die NS4-Problem-Seite ist zusehen unter: www.datenpunkt.de)

  1. Moin Susann,

    guck Dir mal folgende Zeilen in Deinem Skript an:

    function aufruf(selObj) {
    ....
        self.name=selectWert(selObj);
    ....
    <body onload="aufruf();return false">

    d.h. Du definierst eine Funktion mit dem Argument selObj, welches auch in der Funktion weiterverwendet wird. Im "onload..." wird die Funktion aber ohne Argument aufgerufen, was bereits schon den Absturz erklären könnte...  Vielleicht löst das ja schon Dein Problem, ansonsten poste das geänderte Skript einfach nochmal...

    Bis dannundwann

    Andreas

    1. Moin Andreas,
      vielen Dank für Deine prompte Reaktion...
      Deinen Vorschlag habe ich umgesetzt..und versah den unload-tag mit folgenden Parametern:

      onload="aufruf(document.layers['Layer1'].document.images[sObj]);return false"

      Insgesamt sieht sich das (abgespeckte) Script nun folgendermaßen an:

      function aufruf(selObj) {

      self.name=selectWert(selObj);

      self.location.href="navi.htm";

      }

      function selectWert(sObj) {
          
          return document.layers[sObj.selectedIndex].document.images[sObj];
      }

      <body onload="aufruf(document.layers['Layer1'].document.images[sObj]);return false">

      Resultat: kein Absturz aber ansonsten völlige Ignoranz meiner Absicht :-( und diese ist:
      Beibehalten der Javascript-Variablen bei NS4 nach einem Browserfenster-Resize.

      Ich nehme an, dass ich mit diesem Script einen schweren Denkfehler verarbeitet habe.
      Für jeden weiteren sachdienlichen Hinweis bin ich dankbar.

      Susann

      1. Moin Susann,

        Resultat: kein Absturz aber ansonsten völlige Ignoranz meiner Absicht :-( und diese ist:
        Beibehalten der Javascript-Variablen bei NS4 nach einem Browserfenster-Resize.

        Das Thema hat mich auch mal interessiert, daher hab ich ne kleine Testseite geschrieben:

        ========8><=======================================================

        <html><head>
        <script language="JavaScript">
        <!--
          A = 3.14159,
          B = 2.71828,
          text = "Moin Moin!";
          var merkstring;
          var hexcode="0123456789ABCDEF";

        function codiere_merkstring() {
            result = "";
            for(i=0; i<merkstring.length; ++i) {
              c = merkstring.charCodeAt(i);
              c_lo = c%16;
              c_hi = parseInt(c/16);
              result = result+hexcode.charAt(c_hi)+hexcode.charAt(c_lo);
            }
            self.name = result;
          }

        function decodiere_merkstring() {
            merkstring="";
            for(i=0; i<self.name.length/2; ++i) {
              c_hi = hexcode.indexOf(self.name.charAt(2*i));
              c_lo = hexcode.indexOf(self.name.charAt(2*i+1));
              merkstring=merkstring+String.fromCharCode(c_hi*16 + c_lo);
            }
          }

        function variablen_merken() {
            merkstring = "A="+A+"; B="+B+"; text='"+text+"';";
            codiere_merkstring();
          }

        function variablen_lesen() {
            decodiere_merkstring();
            eval(merkstring);
          }

        function showVar() {
            alert('A = '+A+' B = '+B+' text = '+text);
          }

        function changeVar() {
            A = 4711;
            B = 2000;
            text = "Huch? Wer da??";
          
            // Wird folgende Zeile auskommentiert, so haben A und B
            // nach einem Reload wieder ihre alten Werte.
          
            variablen_merken();
          }

        //-->
        </script>
        </head>
        <body onLoad="variablen_lesen();" >
        <a href="" onClick="showVar();return false;">Variablen zeigen</a><br>
        <a href="" onClick="changeVar();return false;">Variablen Ändern</a><br>
        <a href="" onClick="alert(self.name);return false;">Fenstername zeigen</a>
        </body>
        </html>

        ========8><=======================================================

        Wie das ganze funktioniert: Der Fenstername self.name wird zum Zwischenspeichern der Variablen "mißbraucht". Als erste Idee käme einen da in den Sinn, einfach

        self.name = "A="+A+"; B="+B+";";

        zu schreiben, um später einfach mit eval(self.name) wieder die alten Werte in A und B einlesen zu lassen. Der Haken an der Sache ist aber, daß Zeichen wie '=' und auch andere für self.name nicht zulässig sind. Daher habe ich noch zwei Funktionen hinzugefügt, die einen String in Hexcode - und zurück konvertieren  können (codiere_merkstring() und decodiere_merkstring()). Der Hexcode wird nun in self.name gespeichert und besteht somit nur aus zulässigen Zeichen. Beim onLoad-Event wird nun self.name ausgelesen, als Klartext in die Variable "merkstring" konvertiert und auf "merkstring" die eval()-Funktion losgelassen. Kleine "Sicherheitslücke": self.name sollte am Anfang leer sein (ist es normalerweise) oder einen hexcode enthalten, der zu wohldefinierten Variablenwerten führt. Bei window.open(...) kann mit name="..." z.B. gleich der Fenstername festgelegt werden. Vielleicht fällt dazu jemandem ja noch was eleganteres ein...?!

        Bis dannundwann

        Andreas

        1. Hallo Andreas,
          Danke für Dein Script...ich habe es ausprobiert, darüber gebrütet und glaube das Grundprinzip zu verstehen. Jedoch gibt es in meinem JS-Anfängerhirn noch diverse Verständnisprobleme speziell im Hinblick auf die Umsetzung des Prinzips für meine Menüleiste mit rollover- und onclick-Effekten.

          1.
          Das Definieren von Variablen..
          in Deinem Script hast Du Zahlenwerte und Text als Variablen definiert.
          Welche Werte braucht mein Script als Variablen, um vor einem resize den letzten aktuellen
          Zustand in der Navigationsleiste speichern zu können?

          2. Codierung /Decodierung
          Ist es für mein Anwendungsbeispiel überhaupt erforderlich, einen String in Hexcode
          und zurück zu konvertieren?
          Wenn ich das richtig/falsch verstanden habe, ist diese Konvertierung nur notwendig, wenn
          beliebige Zeichenketten mit unzulässigen Zeichen übergeben bzw. wieder aufgerufen werden sollen.
          Bei der von mir gebastelten Navigationsleiste geht es ja eigendlich nicht um die Übergabe von Text bwz. Zahlenwerten, sondern um Dateien deren Namen, die von vornherein auch ohne die unerwünschten Zeichen benannt werden können. Oder?...oder geht es hier um mehr ;-)?

          Sollten meine Fragen merkwürdig erscheinen, dann ist es ein sicheres Zeichen dafür, dass ich
          den grossen Zusammenhang noch nicht so ganz begriffen habe. Ich bitte um Nachsicht.

          Für ein besseres Gegen-Verständnis für mein Anliegens habe ich nachfolgend einen Auszug
          aus dem Script der Menüleiste beigefügt, aus dem die (zu übergebenen) JS-Effekte ersichtlich sind.

          Susann

          <HTML>
          <HEAD>
          <TITLE>pathfinder</TITLE>
          <SCRIPT LANGUAGE="JavaScript">
                                <!--
                                   NS4 = document.layers;
                                   if (NS4) {
                                      origWidth = innerWidth;
                                      origHeight = innerHeight;
                                   }

          function reDo() {
                                   if (innerWidth != origWidth innerHeight != origHeight)
                                      location.reload();
                                }

          if (NS4) onresize = reDo;

          var nSelect = 99;

          pic_normal = new Object();
                  pic_highlight = new Object();
                  pic_selected = new Object();
                  pic_cur = new Object();

          text = new Object();

          defaultStatus = ""

          pic_highlight[0] = "a_me.gif";
              pic_normal[0] = "me.gif";
              pic_selected[0] = "v_me.gif";
              pic_cur[0] = pic_normal[0];

          pic_highlight[1] = "a_print.gif";
              pic_normal[1] = "print.gif";
              pic_selected[1] = "v_print.gif";
              pic_cur[1] = pic_normal[1];

          text[0] = "identity";
              text[1] = "print";
              
              
            function mOver (bnr)
              {
                status=text[bnr];
                     pic_cur[bnr] = pic_highlight[bnr];
                { if (navigator.appName == 'Netscape')
          { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
          {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                }
              }

          function mOut (bnr)
              {
                          if(nSelect == bnr)
                          {
                                  pic_cur[bnr] = pic_highlight[bnr];
                          }
                          else
                          {
                                  pic_cur[bnr] = pic_normal[bnr];
                          }
                 { if (navigator.appName == 'Netscape')
          { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
          {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                 }
              }

          function mClick (bnr)
              {
                          if(nSelect != 99)
                          {
                                  pic_normal[nSelect] = pic_selected[nSelect];
                             pic_cur[nSelect] = pic_selected[nSelect];

          { if (navigator.appName == 'Netscape')
          { window.document.layers[0].document.images[nSelect].src=pic_cur[nSelect]; } else
          {      document.all.Layer1.document.images[nSelect].src=pic_cur[nSelect]; }    
                          }
                  
                          
                          }
                          
                 pic_cur[bnr] = pic_highlight[bnr];
                
                 { if (navigator.appName == 'Netscape')
          { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
          {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                 }
                 aktiv=bnr;
              }

          function ZweiFrames(URL0,F0,URL2,F2)
               {  
                parent.frames[F0].location.href=URL0;
                parent.frames[F2].location.href=URL2;
               }
          // -->
          </script>

          </head>
          <body topmargin="0" leftmargin="0" bgcolor="#818A9F" link="#818A9F" vlink="#818A9F" alink="#818A9F">
          <div id="Layer1" style="position:absolute; left:0px; top:0px; width:801px; height:30px; z-index:1">
          <table width="100%" valign="top" border="0" cellspacing="0"  cellpadding="0" name="leiste" height="30">
          <tr>
          <td  border=0 width=100 align=center valign=middle> <a
          onMouseOver="mOver(0); return true;"
          onMouseOut="mOut(0); return true;"
          onMouseDown="mClick(0); return true;"
          href="javascript:ZweiFrames('me_o.htm',0,'me_u.htm',2)"><img src="me.gif" width="140" height="25" border=0 align="middle" name="identity"></a>
          </td>
          <td valign=middle border=0 width=100 align=center> <a  
          onMouseOver="mOver(1); return true;"
          onMouseOut="mOut(1); return true;"
          onMouseDown="mClick(1); return true;"
          href="javascript:ZweiFrames('print_o.htm',0,'print_u.htm',2)"> <img src="print.gif" width="140" height="25" border=0 align="middle" name="print"></a>
          </td>
          </tr></table></div>
          </BODY>
          </HTML>

          1. !!!!!Korrektur!!!!!
            Hinweis bzgl. meines letzten Postings:
            Sorry, da ist etwas falsch gelaufen beim letzten Austrimmen meines Scriptes.
            Susann

            Hier ist das richtige:
            <HTML>
            <HEAD>
            <TITLE>pathfinder</TITLE>
            <script language="JavaScript">
                                
            // hier  steht das NS4-Resize-Script, das für die Deaktivierung der JS-Effekte sorgt

            var nSelect = 99;

            pic_normal = new Object();
                    pic_highlight = new Object();
                    pic_selected = new Object();
                    pic_cur = new Object();

            text = new Object();

            defaultStatus = ""

            pic_highlight[0] = "a_me.gif";
                pic_normal[0] = "me.gif";
                pic_selected[0] = "v_me.gif";
                pic_cur[0] = pic_normal[0];

            pic_highlight[1] = "a_print.gif";
                pic_normal[1] = "print.gif";
                pic_selected[1] = "v_print.gif";
                pic_cur[1] = pic_normal[1];

            text[0] = "identity";
                text[1] = "print";

            function mOver (bnr)
                {
                  status=text[bnr];
                       pic_cur[bnr] = pic_highlight[bnr];
                  { if (navigator.appName == 'Netscape')
            { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
            {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                  }
                }

            function mOut (bnr)
                {
                            if(nSelect == bnr)
                            {
                                    pic_cur[bnr] = pic_highlight[bnr];
                            }
                            else
                            {
                                    pic_cur[bnr] = pic_normal[bnr];
                            }
                   { if (navigator.appName == 'Netscape')
            { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
            {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                   }
                }

            function mClick (bnr)
                {
                            if(nSelect != 99)
                            {
                                    pic_normal[nSelect] = pic_selected[nSelect];
                               pic_cur[nSelect] = pic_selected[nSelect];

            { if (navigator.appName == 'Netscape')
            { window.document.layers[0].document.images[nSelect].src=pic_cur[nSelect]; } else
            {      document.all.Layer1.document.images[nSelect].src=pic_cur[nSelect]; }    
                            }
                    
                            
                            }
                            nSelect = bnr;
                   pic_cur[bnr] = pic_highlight[bnr];
                  
                   { if (navigator.appName == 'Netscape')
            { window.document.layers[0].document.images[bnr].src=pic_cur[bnr]; } else
            {      document.all.Layer1.document.images[bnr].src=pic_cur[bnr]; }    
                   }
                   aktiv=bnr;
                }

            function ZweiFrames(URL0,F0,URL2,F2)
                 {  
                  parent.frames[F0].location.href=URL0;
                  parent.frames[F2].location.href=URL2;
                 }

            // -->
            </script>

            </head>

            <body topmargin="0" leftmargin="0" bgcolor="#818A9F" link="#818A9F" vlink="#818A9F" alink="#818A9F">
            <div id="Layer1" style="position:absolute; left:0px; top:0px; width:801px; height:30px; z-index:1">
              <table width="100%" valign="top" border="0" cellspacing="0"  cellpadding="0" name="leiste" height="30">
                <tr>
                  <td  border=0 width=100 align=center valign=middle> <a
            onMouseOver="mOver(0); return true;"
            onMouseOut="mOut(0); return true;"
            onMouseDown="mClick(0); return true;"
            href="javascript:ZweiFrames('me_o.htm',0,'me_u.htm',2)"> <img src="me.gif" width="140" height="25" border=0 align="middle" name="identity"></a>
                  </td>
                  <td valign=middle border=0 width=100 align=center> <a  
            onMouseOver="mOver(1); return true;"
            onMouseOut="mOut(1); return true;"
            onMouseDown="mClick(1); return true;"
            href="javascript:ZweiFrames('print_o.htm',0,'print_u.htm',2)"> <img src="print.gif" width="140" height="25" border=0 align="middle" name="print"></a>
                  </td>
                 </tr>
              </table>
            </div>
            </BODY>
            </HTML>