IMG - OnError/OnLoad - Browserproblem
maugenst
- browser
0 Der Martin0 maugenst
Hallo
Ich habe ein Problem, bei welchem ich eventuell einen Tipp aus der Community benötige. Zuerst einmal kurz über den Hintergrund des Problems:
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. Die Idee hierzu kam mir über die Beschreibung auf: http://javascript.jstruebig.de/javascript/42/. 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. Ich bin mir nicht sicher an was genau dies liegen kann. Das Verhalten ist unter IE nicht zu beobachten.
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.
Vieleicht hat jemand eine Idee an was dies liegen könnte oder schon eine Idee wie man das umgehen kann.
Vielen Dank schon mal im Voraus und Grüße,
maugenst
Hier der Code der Startpage ... startseite.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Startseite</title>
<style type="text/css">
body {
font-family: Arial, Helvetica;
}
</style>
<script type="text/javascript">
function Reload() {
this.location.reload();
}
function reportError() {
window.setTimeout("Reload()",2000);
document.getElementById("status").innerHTML = "Server startet... Bitte gedulden Sie sich einen Moment...";
}
function Forward() {
window.location.href = "http://localhost:8080/xyz";
}
function reportSuccess() {
window.setTimeout("Forward()",2000);
document.getElementById("loaderAnimation").style.visibility = "hidden";
document.getElementById("status").innerHTML = "Server ist jetzt erreichbar. Sie werden in wehnigen Momenten weitergeleitet.";
}
</script>
</head>
<body>
<center>ACHTUNG: Sie werden automatisch zur Eingabeseite weitergeleitet. <br>
<br>
<img id="loaderAnimation" src="ajax-loader.gif">
<br>
<div id="status">Server startet... Bitte gedulden Sie sich einen Moment...</div>
<br>
Falls Sie direkt navigieren möchten klicken Sie bitte folgenden Link:<br>
<a href="http://localhost:8080/xyz">Flohmarkt Eingabe</a></center>
<img src="http://localhost:8080/xyz/check.gif"
style="width: 0; height: 0; visiblity: hidden; position: absolute;"
onerror="reportError()" onload="reportSuccess()">
</body>
</html>
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
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