Andreas Bierhals: Wertübergabe

Beitrag lesen

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