Problem mit Opera und onLoad
OL
- browser
0 Andreas Dölling0 Martin Hölter0 OL
Ich arbeite zur Zeit mit leider duerftigen und teils veralteten Kenntnissen an einer Website mit Frames, links ein Frame "menue" und rechts ein Frame "inhalt". Bei Auswahl eines Menue-Eintrags wird nicht nur die entsprechende Datei im Frame "inhalt" geladen, sondern ausserdem durch ein JavaScript die Erscheinung des Menues modifiziert (z.B. durch Hervorhebung des ausgewaehlten Menue-Eintrags).
Um sicherzustellen, dass auch bei Navigation mit dem browsereigenen Back-Button das Menue jeweils zum dargestellten Inhalt passt, wird die Anpassung des Menues nicht im Frame "menue" selber, sondern durch einen Funktionsaufruf im Frame "inhalt" ausgeloest: die im Frame "inhalt" geladene Datei ruft im Eventhandler "onLoad" eine Funktion im Frame "menue" auf und uebergibt ihr diejenigen Parameter, die die Funktion fuer die Anpassung des Menues braucht.
Das funktioniert so weit problemlos mit (neueren) Versionen von Netscape, Firefox und MSIE, aber nicht mit Opera: Opera fuehrt den Funktionsaufruf im onLoad nur beim ersten Laden der Datei aus, aber wenn der Benutzer spaeter per Back-Button auf die betreffende Seite zurueckkehrt, wird das onLoad von Opera nicht erneut ausgefuehrt. Die beiden Frames werden dadurch asynchron.
Frage: Weiss jemand, wie man Opera dazu bewegen kann, das onLOad erneut auszufuehren? Es hilft uebrigens nicht weiter, den Funktionsaufruf aus dem onLoad in den head- oder body-Bereich der aufgerufenen Datei zu verlagern: er wird auch dort nur beim ersten Laden der Datei ausgefuehrt.
Ein vereinfachtes Beispiel ohne Frames, nur mit einem 'alert' im onLoad, steht an folgender Adresse (Seite aufrufen, alert bestaetigen, auf "weiter" klicken, dann per Back-Button auf die erste Seite zurueckkehren):
http://www.lieberknecht.de/tmp/1.html
Waere fuer Hilfe sehr dankbar!
Hallo,
liegt an den Cache-Einstellungen in Opera.
Ich habe bei mir mal das Caching auf "off" gesetzt - und siehe da: die alert-Ausgabe erscheint wie gewünscht.
Habe jetzt leider keinen praktikablen Tip parat, wie man das umgehen kann. Grundsätzlich könnte man der Seite als Header-Information die Angeb mitliefern, daß die Seite auf jeden Fall neu zu laden ist - aber ich weiß nicht, ob das in allen Browsern zuverlässig funktioniert.
Ciao,
Andreas
Hi!
Habe jetzt leider keinen praktikablen Tip parat, wie man das umgehen kann. Grundsätzlich könnte man der Seite als Header-Information die Angeb mitliefern, daß die Seite auf jeden Fall neu zu laden ist - aber ich weiß nicht, ob das in allen Browsern zuverlässig funktioniert.
Beschreibung der Header-Angaben:
meta-Angabe 1
meta-Angabe die 2.
HTTP-Codes - such auf der Seite nach Cache-Control
Schoenen Dank an Andreas Doelling und Martin Hoelter! Vorlaeufiges Fazit:
Eine einfache Loesung liegt nicht auf der Hand.
Das Seitencaching moechte ich grundsaetzlich zulassen: meine Seiten sind ohnehin oft zu schwer, und da moechte ich keinen Nutzer zwíngen, eine Seite waehrend der gleichen Session mehrmals herunterzuladen.
Im uebrigen ist es mir auch garnicht gelungen, mit einer der von Martin angegebenen Header-Einstellungen Opera vom Caching abzuhalten. Ich bin nicht einmal ganz sicher, ob wir es mit normalem Caching auf dem lokalen Festspeicher zu tun haben, denn dort cachen die anderen Browser ja auch und fuehren trotzdem beim wiederholten Aufruf der Seite die JavaScript-Funktion wieder aus.
Ich hatte gehofft, dass es irgendeinen naheliegenden Hack gaebe, Opera zur wiederholten Ausfuehrung zu zwingen. Falls jemandem noch etwas einfaellt: immer her damit!
OL