maugenst: IMG - OnError/OnLoad - Browserproblem

Beitrag lesen

Hi Martin

Perfekt!! Vielen vielen Dank!! Deine Idee war genau die richtige. Der Cache war das Problem. Folgender Code behebt das Problem:

  
.  
.  
.  
<img id="checkGif" src="http://localhost:8080/xyz/check.gif"  
	style="width: 0; height: 0; visiblity: hidden; position: absolute;"  
	onerror="reportError()" onload="reportSuccess()">  
  
<script type="text/javascript">  
document.images["checkGif"].src = 'http://localhost:8080/xyz/check.gif' + '?' + Math.random();  
</script>  
</body>  
</html>  

Nochmals Danke und viele Grüße,
maugenst

Hallo,

Ich möchte in einer statischen lokalen Webseite mittels der OnError/OnLoad methode auf dem <img> tag prüfen, ob ein Webserver schon hochgefahren werden konnte, oder ob er gerade noch lädt.

muss ich diese Beschreibung verstehen? Ich hoffe nicht.

Die Idee hierzu kam mir über die Beschreibung auf: http://javascript.jstruebig.de/javascript/42/.

Ah, gut. Damit prüfst du, ob eine Bildressource erreichbar ist. Ist sie es nicht, muss das aber nicht unbedingt am Server liegen; es könnte auch ein clientseitiges Problem sein.

Jetzt zeigt sich aber leider das Verhalten, dass Firefox beim Laden der Seite mittels eines Shortcuts (startseite.lnk --> startseite.html) oder über direkten Klick auf die html-Seite, auch wenn der Server noch nicht da ist die onload() Methode aufruft.

Hast du den zufälligen URL-Parameter an den Request angehängt, oder rufst du nur die Bildressource unter einer konstanten URL ab? Falls letzteres: Dann holt Firefox das Bild natürlich auch gern mal aus seinem Cache, und meldet dann fröhlich: Hab ich! Um genau das zu vermeiden, dient der angehängte Parameter, der sich bei jedem Check ändert.

Ich bin mir nicht sicher an was genau dies liegen kann. Das Verhalten ist unter IE nicht zu beobachten.

Wundert mich. Denn in der Defaulteinstellung ist der auch sehr aggressiv eingestellt, was das Caching betrifft, und cacht tendentiell mehr als er sollte.

Wenn die Seite einmalig geladen ist wird auch der richtige code durchlaufen. Nur wenn der Browser die Seite über einen direkten Doppelklick auf die html-Seite lädt tritt dieses Fehlverhalten auf.

Huch?

function reportError() {
window.setTimeout("Reload()",2000);
document.getElementById("status").innerHTML = "Server startet... Bitte gedulden Sie sich einen Moment...";
}

Mal ganz unschuldig gefragt: Wie lange braucht denn dein Webserver zum Starten? Mein Apache ist in wenigen Sekunden bereit (und wird normalerweise sogar beim Rechnerstart mit gestartet).

<img src="http://localhost:8080/xyz/check.gif"
style="width: 0; height: 0; visiblity: hidden; position: absolute;"
onerror="reportError()" onload="reportSuccess()">

Kann es sein, dass Firefox hier "optimiert" und das Bild gar nicht erst anfordert? Immerhin hat es eine Größe von 0 und außerdem visibility:hidden - es ist also sozusagen doppelt unsichtbar.

Übrigens finde ich hier auch die Antwort auf die Frage, die ich weiter oben gestellt habe: Du forderst das Bild unter einer immer konstanten URL an. Dann ist klar, dass der Firefox das aus dem Cache holt, wenn er kann.

So long,
Martin