Eine Lösung für das Problem, einen Wert (z.B. den Inhalt einer JS-Variablen) von einer
HTML-Seite an eine später aufgerufene zu übergeben, liegt in window.name.
Hier läßt sich auch ein längerer Text abspeichern (das wurde sogar mit 200 kB erfolgreich
getestet; es ist jedoch wohl nicht zu empfehlen, im praktischen Betrieb mehr als einige
Kilobytes zu nehmen). Thomas Fischer (Uni Kassel) hat diese tolle Entdeckung gemacht.
Eine Schwierigkeit liegt jedoch darin, daß
die Netscape-Browser als window.name nur Zeichenketten zulassen, die nichts außer
Buchstaben, Ziffern und dem Unterstrich _ enthalten (Umlaute, Satzzeichen und auch
Leerzeichen sind nicht zulässig). Hier werden nun Funktionen vorgestellt, die eine
entsprechende Umwandlung jeder beliebigen Zeichenkette durchführen.
Ein weiteres Problem liegt in einem Bug, der in bestimmten Versionen des MSIE 5.x
(insbesondere MSIE 5.5) auftritt und zwar nur in Browserfenstern, die bei ihrer Öffnung einen Namen
zugewiesen bekamen. Eine per onload im Body-Tag aufgerufene Funktion (sie darf keinesfalls schon
vorher aufgerufen werden, wenn der Browser noch den Quellcode interpretiert!) prüft daher, ob der Bug
auftritt, und öffnet gegebenenfalls ein neues, unbenanntes Fenster.
Sofort zum Test
spzzchn= "*+-./_@"; // die Zeichen, die escape nicht umwandelt // ein Ersatz für replace (was zu JS 1.2 gehört) function ersetze(text,stxt,etxt) { var txt=text; var stl=stxt.length; var etl=etxt.length; var k=0; while (k<txt.length+1-stl) { var i = txt.indexOf(stxt,k); if (i<k) k=txt.length+2; else { txt = txt.substring(0,i) + etxt + txt.substring(i+stl,txt.length); k+=etl; } } return txt; } function WertSpeichern(eingabe) { var a=escape(eingabe); for(var i=0;i<spzzchn.length;i++) a=ersetze(a,spzzchn.charAt(i),"%X"+i); a=ersetze(a,"%","_"); self.name=a; } function WertAusgeben() { var b=""+self.name; b=ersetze(b,"_","%"); for(var i=0;i<spzzchn.length;i++) b=ersetze(b,"%X"+i,spzzchn.charAt(i)); b=unescape(b); return b; } // Test auf MS-window.name-Bug function winnamebugtest() { if(navigator.userAgent && navigator.userAgent.indexOf("MSIE")>0) { var altname=window.name; var neuname="X"+(new Date()).getTime(); window.name=neuname; self.location.href="javascript:void(0)"; if(window.name!=neuname) { alert("Ein Bug Ihres Browsers verhindert die dauerhafte Zuweisung\n"+ "eines anderen Wertes an window.name, wenn das Fenster schon\n"+ "beim Öffnen einen Namen erhalten hatte.\n\n"+ "Daher wird jetzt ein neues, unbenanntes Fenster geöffnet."); window.open(self.location.href,"", "status=1,location=1,menubar=1,resizable=1,toolbar=1,scrollbars=1"); history.back(); window.close(); } else self.focus(); window.name=altname; } } [...] <body ... onload="winnamebugtest()"> |
Um zu testen, ob der Wert wirklich übergeben wird, bitte die Seite "Wert anzeigen" aufrufen!