preload bei Icons funzt nicht richtig...
flashnfantasy
- javascript
Der Script sieht etwa folgendermaßen aus...
var icon = document.createElement("img");
icon.src = "./icons/online.gif";
Nun will ich dieses GIF auf der Webseite einige male verwenden, ruhig mal annehmen, daß es einige 100mal sind.
Jetzt hatte ich gehofft, ich lade nur einmal das Icon, und ab da werde es bei jedem weiteren male gecached.
Das Protokoll des Apache-Server zeigt mir aber, daß es jedesmal geladen wird.
Auch folgender Konstrukt hilft nicht:
var nextIcon = icon.cloneNode(15);
-------------------
Wie kann ich also das Icon einmal vom Server laden, und dann anschliessend immer wieder aus dem Cache ?
Hi f,
Wie kann ich also das Icon einmal vom Server laden, und dann anschliessend immer wieder aus dem Cache ?
Dieses Problem wurde erst kürzlich hier diskutiert. Schau mal in der Suche (oder in den noch offenen Threads) nach! Meiner Erinnerung nach war das ein Problem des IE. Außerdem kannst Du den Browser nicht wirklich zwingen zu cachen.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Ja, stimmt, hatte ich übersehen.
---
Habe jetzt intensiv im Netz gestöbert, und habe folgendes rausgefunden...
Images werden erst gecached, wenn sie hochgeladen sind
Wenn man jedoch eine Webadresse als Intention sieht, ein Image zu cachen, dann führt der IE und auch FireFox das nicht zusammen (zumindest nicht in JS).
Nun der Work-Around (beim ersten Test hat er funktioniert).
Die Grafiken werden mit einem Event-Listener 'onLoad' versehen und hochgeladen.
Erst wenn alle Grafiken hochgeladen sind, wird der Script gestartet.
Dann wird mit cloneNode tatsächlich die Grafik aus dem Cache gelesen.
Habe das mit dem Apache-Log auch überprüft.
Man muß aber vor dem cloneNode den Eventlistener wieder entfernen, ansonsten wird er beim cloneNode immer wieder aufgerufen.
---
Natürlich ist das unbefriedigend, daß der Script erst startet, wenn alle Grafiken hochgeladen worden sind.
Aber es ist jetzt einfach nur ne Fleiß-Sache, die Grafiken durch Platzhalter zu ersetzen und nachträglich einzufügen...