HTML Cache Manifest Fallback - Offline Redirect

#basTi

Commodore
Registriert
Aug. 2005
Beiträge
4.733
Hallo zusammen ...

ich teste gerade mit dem HTML5 Cache Manifest herum aber bekomme es einfach nicht so zum laufen.

Situation: Ich will, dass meine Seite merkt ob sie verbunden ist und falls nicht, soll eine Offline Page angezeigt werden, welche gecached ist.

Dies sollte meiner Ansicht nach mit der Cache Manifest (Fallback) relativ leicht realisierbar sein doch ich scheitere schon an kleinen Testbeispielen.

Was geht:
Cachen von Dateien. Also ich Cache zB index.html und eine Offline.html, welche sich jeweils gegenseitig verlinken. Gehe ich Offline funktioniert das auch noch 1A.

Was nicht geht:
Fallback auf andere Dateien. In der index.html ist ein Link auf eine abc.html, welche NICHT auf dem Server existiert. Im Cache manifest ist aber folgendes definiert:
Code:
FALLBACK:
abc.html offline/offline.html
Durch diesen Code sollte beim Klick auf den Link zur abc.html ja trotztdem die offline.html aufgerufen werden, was aber nicht passiert.
Link zu meinem Code

Wie das Endergebnis aussehen sollte:
Ich rufe die Seite auf und
- Falls ich Offline bin werde ich auf eine offline.html umgeleitet
- Falls ich Online bin funktioniert alles normal
 
`basTi schrieb:
Was nicht geht:
Fallback auf andere Dateien. In der index.html ist ein Link auf eine abc.html, welche NICHT auf dem Server existiert.

du kannst mit dem HTML5 Cache Manifest nicht bestimmen, was mit anderen Servern passiert ;)
Wenn ich mich recht entsinne gibt es in der JS-API zu dem HTML5 Cache aber eine Eigenschaft bei der man den Online-Status auslesen kann, sollte dieser offline sein änderst du einfach per JS das Ziel des Links, in jQuery ungefähr so:
Code:
$('#some-external-url').click(function(e) {
  if(offlineState == 'online') return;

  e.preventDefault();
  location.href = '/abc.html';
});
 
Also ich denke schon, dass mein Beispiel in der Theorie funktionieren sollte.
Das Fallback gibt an, welche Datei aufgerufen wird, falls eine andere nicht existiert (im Cache und/oder Normal) ... wenn ich die entsprechende Datei einfach nicht mitgebe, sollte er immer ins Fallback laufen, bei klick auf den Link.
FALLBACK:
An optional section specifying fallback pages if a resource is inaccessible.
 
Hier steht "Mist":
Alle URLs die du in dem Manifest angibst, gelten aber nur für deinen Server, einen externen Server kannst du damit nicht "kontrollieren", wäre immerhin die perfekte Phising-Masche.
Immerhin hast du nur "abc.html" angegeben, und bei einem Cache-Manifest auf www.example.com bedeutet dies eben, dass damit www.example.com/abc.html gemeint ist und nicht www.example.org/abc.html.
Du hast im Cache-Manifest nur relative oder absoluten Angaben zu deinem Server nicht zu anderen Servern.
Edit: Ich hatte dein "welche nicht auf dem Server" existiert anders interpretiert....



Das hier ist relevant:
Dein Beispiel funktioniert nicht, weil die "/offline/offline.html" nicht initial in den Cache geladen werden kann, daher wird das Cache-Manifest als ungültig deklariert. Du hast den Pfad absolut angegeben und damit würde diese offline-Datei auf http://xn--kll-sna.com/offline/offline.html statt http://xn--kll-sna.com/wiplug/cachetest2/offline/offline.html zeigen, mach den Slash vorne weg und es stimmt ;)
Google Chrome und dessen Web Developer Tools sind bei HTML5 Cache Geschichten wirklich sehr nützlich ;)
 

Anhänge

  • manifest.png
    manifest.png
    22 KB · Aufrufe: 97
Zuletzt bearbeitet: (Bild angehängt)
Erstmal danke :)

Mit Chrome gehts! Mit Opera aber nicht ... wieso auch immer (aktuellste Version) ...
Soo dann teste ich mal weiter :)

Nächstes "Problem" ist, dass die index.html ( welche die Cache Manifest verlinkt ) automatisch gecached wird, wodurch der User trotzt fehlender Connection nicht umgeleitet wird.
Im moment würde ich es wie folgt lösen: Die index.html wie gehabt, leitet aber direkt weiter auf eine app.html. Falls Offline, wird aber das Fallback genommen.
Hat jemand evtl ne elegantere Idee ?
 
wie gesagt kannst du doch eingach per JS den Online-Status abfragen und dann auf eine offline-Seite weiterleiten, anders geht es nicht.
Wenn eine Seite im Cache ist wird sie such genommen, dafür ist der Standard geschaffen worden.
 
Online Status per js finde ich im Netz nur die Methode über ein Dummy Bild laden und die onload/onerror Methode.
Hast du evtl ne Quelle, wo man deinen Vorschlag nachlesen kann?
 
Dankeschön.
Leider in meinem Fall keine Option, da folgendes auf mich zutrifft:
Note: This attribute is inherently unreliable. A computer can be connected to a network without having Internet access.

Werde es deswegen wahrscheinlich wirklich über das FALLBACK lösen.
 
Zurück
Oben