Hallo Leute!
Kurzbeschreibung des Problems:
Mit window.name übergebe ich einen Wert an ein nachfolgendes Fenster, das diesen Wert sofort (onLoad) ausliest und in einer Funktion verwendet. Eigentlich ganz einfach. Das klappt mit Mozilla, jedoch mit IE5 nur bedingt, d.h. der Wert wird zwar übergeben, aber offenbar nicht korrekt an die nächste Funktion weitergeleitet.
Im Einzelnen:
Mittels Buttons soll man auf meiner neugestalteten Homepage zwischen verschiedenen Darstellungsarten per StyleSheet auswählen können, siehe hier: http://www.peterknaak.de/. Dazu verwende ich diese Funktion:
function swapStyle(n)
{
var StyleLinks = document.getElementsByTagName('link');
for ( var i = 0; i < StyleLinks.length; i++ )
{
if (i == n)
{
StyleLinks[i].disabled = false;
}
else
{
StyleLinks[i].disabled = true;
}
}
}
... das bezieht sich auf die im Header angegebenen StyleSheets:
<link rel="stylesheet" title="default" type="text/css" href="format0.css">
<link rel="alternate stylesheet" title="alternative" href="format1.css" type="text/css">
<link rel="alternate stylesheet" title="alternative2" href="format2.css" type="text/css">
onLoad wird immer swapStyle(1) ausgeführt, um das "default"-StyleSheet zu aktivieren. Die entsprechenden Buttons übergeben den Wert n für das jeweilige .css an die Funktion. Z.B.
<button value="default" onClick="swapStyle(2)">Alternative</button>
Das klappt auf diese Weise auch ganz wunderbar mit Mozilla und IE5.
Jetzt soll aber der eingestellte Style nicht vergessen werden, wenn auf den Link zu einer weiteren Seite geklickt wird. Überall, wo ich soetwas gefunden habe, wird das per Cookie geregelt. Aber nicht jeder läßt Cookies zu, deswegen habe ich mich nach einer anderen Lösung umgesehen.
Bei SELFHtml habe ich die recht elegante Methode gefunden, window.name zum Zwischenspeichern von Werten zu benutzen.
Also habe ich folgende Funktion geschrieben:
function start()
{
if (window.name != "")
{
swapStyle(parseInt(window.name.slice(2,3)));
}
else
{
self.name="PK1";
swapStyle(parseInt(window.name.slice(2,3)));
}
// alert("Fenstername: "+window.name+"\nNr: "+window.name.slice(2,3));
}
Dazu wird nun den Buttons ein onClick="self.name='PK1'" (oder '2' etc.) mitgegeben, z.B.:
<button value="default" onClick="swapStyle(1);self.name='PK1'">Default</button>
Mein Problem ist nun, daß diese Funktion, onLoad ausgeführt, mit Mozilla den gewünschten Effekt hat, die Folgeseiten übernehmen brav den vorher eingestellten Style. In IE5 funktioniert es nicht, obwohl offenbar der Wert (besser gesagt: der Fenstername) tatsächlich übergeben wird (habe ich mit dem alert getestet), aber swapStyle wird falsch ausgeführt - nur mit dem Wert 0, also gar kein StyleSheet, außer wenn window.name=="PK1".
Zur Demonstration hier die Startseite http://www.peterknaak.de/test/index.htm zusammen mit der Seite "Musik" zum Testen des Wechselns.
Wo liegt der Fehler? Oder ist das ein Problem des IE5?
Gruß
Peter Knaak