Ankündigung

Einklappen
Keine Ankündigung bisher.

Offline application cache - reload nicht zuverlässig

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Offline application cache - reload nicht zuverlässig

    Hi

    Ich habe eine Eine-Seite-Offline-Web-Applikation, die mit folgendem Code prüft, ob ein Cache-Update verfügbar ist und es bei Bedarf lädt.

    Code:
    <!DOCTYPE html>
    <html manifest="offlineManifest.manifest">
    
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name = "viewport" content = "width = device-width" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <title>GEWEMA Leasingrechner</title>
        <link href="offline.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="jquery-1.7.0.min.js"></script>
        <script type="text/javascript" src="offline10.js"></script>
            <script type="text/javascript">
    
               window.applicationCache.update();
    
             // Check if a new cache is available on page load.
                window.addEventListener('load', function(e) {
    
                window.applicationCache.addEventListener('updateready', function(e) {
                    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
                        // Browser downloaded a new app cache.
                        // Swap it in and reload the page to get the new hotness.
                        if (confirm("Update verfügbar. Runterladen...") === true) {
                        window.applicationCache.swapCache();
                           window.location.reload();
    
                        }
                    } else {
                        // Manifest didn't change. Nothing new to server. 1
                    }
                }, false);
    
                }, false);
    Wenn ich irgendetwas ändere, schreibe ich das in das Offline-Manifest und lade dann Manifest + geänderte Datei hoch.

    Das klappt manchmal einwandfrei, geht aber leider zu oft in die Hose. Die Phänomene sind:

    1) Endlos Reload (Firefox)

    Der confirm-Dialog poppt endlos auf. Ein Klick auf "abbrechen" stoppt das endlose Aufpoppen, allerdings wird nichts upgedatet.

    2) Javascript streikt

    Der Reload scheint geklappt zu haben, allerdings streikt Javascript. D. h. es werden z. B. keine Click-Event-Handlers ausgeführt.
    Hier hilft ein Page-Refresh, dann ist alles so wie es soll.

    Könntet Ihr bitte mal schauen, ob Ihr Fehler entdeckt?
    [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

  • #2
    Hi nochmal,

    auch wenn das hier nicht das populärste Thema zu sein scheint, berichte ich mal über meinen Fortschritt.

    Das Thema appcache für Offline Web-Apps ist anscheinend von vielen Mißverständnissen, Trial & Error etc. und natürlich - wie immer - von unterschiedlichen Browser-Implementierungen begleitet.

    Den Endlos Reload habe ich in den Griff bekommen:

    Entgegen einer früheren Empfehlung habe ich einer neueren Empfehlung folgend die manifest-Datei selber aus der Liste der zu cachenden Dateien herausgenommen.
    Zudem habe ich die Seite aus der Manifest CACHE Liste entfernt, die das manifest-Attribut enthält. Das ist die eine Startseite der One-Page-App.

    Zudem habe ich die .htaccess so formuliert

    Code:
    AddType text/cache-manifest .manifest
    <Files *.manifest>
        ExpiresActive On
        ExpiresDefault "access plus 0 seconds"
    </Files>
    Javascript streikt auch nicht mehr

    Weiß jetzt gar nicht, warum genau.

    Das einzige, was bleibt ist, dass ein Reload der Startseite (also die eine Seite der One-Page-App mit manifest-Attribut) bei ca. 1 von 10 versuchen nicht upgedatet wird.

    Da hilft dann nur ein ein browserseitiges Leeren des Caches und Reload.

    Schönes Wochende.
    [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

    Kommentar


    • #3
      Ich habe das mal eben bei einer WebApp von mir geprüft.

      Der Code aus #1 ist exakt der gleiche Code wie bei mir. Offensichtlich haben wir von der gleichen Seite abgeschrieben.

      Ein kleiner Unterschied --- Bei mir funktioniert es .

      die .htaccess habe ich um folgende Zeile ergänzt:

      AddType text/cache-manifest .manifest

      In die .manifest Datei habe ich eine Versionsnummer geschrieben, die ich bei jedem Update ändere:

      Sie sieht wie folgt aus:

      CACHE MANIFEST

      # Version: 1.07

      CACHE:
      index.htm
      usw.

      Evtl. hilft Dir das etwas weiter.

      Kommentar


      • #4
        Vielen Dank. Die Versionsnr. habe ich auch drin und die ändere ich auch, wenn ich Neuerungen hochlade.

        Der confirm Dialog wird sogar aufgerufen, aber die Änderung in meiner Startseite wird nicht sichtbar.

        Das passiert wie gesagt nicht immer. Nur manchmal.

        Very strange.

        [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

        Kommentar

        Lädt...
        X