Announcement

Collapse
No announcement yet.

Verwendung des applicationCache von HTML5

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verwendung des applicationCache von HTML5

    Hallo,

    ich hätte einige Fragen zur Verwendung des applicationCache von HTML5.
    Wie ich gelesen habe, lassen sich die Dateien einer Webanwendung im lokalen Speicher ablegen, um sie offline nutzen zu können.
    Nun habe zu Testzwecken zunächst eine ganz einfache mobile Anwendung mit jQuery Mobile gebaut. Diese besteht aus einer Startseite, einer Informationsseite und natürlich den benötigten JavaScripts und Stylesheets.

    index.html:

    Code:
    <!DOCTYPE html>
    <html manifest="example.appcache">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <title>Startseite</title>
    <link rel="stylesheet" href="jquery.mobile-1.3.0.min.css" />
    <script src="jquery-1.9.1.min.js"></script>
    <script src="jquery.mobile-1.3.0.min.js"></script>
    </head>
    <body>
    ...
    </body>
    </html>
    info.html:

    Code:
    <!DOCTYPE html>
    <html manifest="example.appcache">
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <title>Informationsseite</title>
    <link rel="stylesheet" href="jquery.mobile-1.3.0.min.css" />
    <script src="jquery-1.9.1.min.js"></script>
    <script src="jquery.mobile-1.3.0.min.js"></script>
    </head>
    <body>
    ...
    </body>
    </html>
    example.appcache:

    Code:
    CACHE MANIFEST
    index.html
    info.html
    jquery.mobile-1.3.0.min.css
    jquery-1.9.1.min.js
    jquery.mobile-1.3.0.min.js
    Zuerst interessiert mich, ob beim ersten Aufruf der Startseite automatisch alle im Manifest enthaltenen Dateien heruntergeladen und im Cache gespeichert werden. Bei dem Stylesheet und den JavaScripts dürfte das der Fall sein, da diese bereits von index.html eingebunden werden.
    Aber wie schaut es mit der Datei info.html aus? Wird die auch gleich mit gecacht und ist damit dann auch gleich offline verfügbar oder wird die Seite erst heruntergeladen, wenn sie zum ersten Mal angezeigt wird?
    Was passiert, wenn der Nutzer anschließend in seinem Browser auf "Neu laden" oder "Aktualisieren" klickt? Wird dann weiterhin die Offline-Version genutzt (also der Klick ignoriert) oder findet ein neuer Download aller Dateien statt?

    Wie ich außerdem gelesen habe, muss ich zur Realisierung einer neuen Programmversion immer das Manifest abändern. Dafür habe einen Versionskommentar angelegt, dessen Nummer ich dann nur erhöhen muss:

    Code:
    CACHE MANIFEST
    # Version 1
    index.html
    info.html
    jquery.mobile-1.3.0.min.css
    jquery-1.9.1.min.js
    jquery.mobile-1.3.0.min.js
    Reicht das schon oder sind größere Änderungen nötig?
    Wie funktioniert dann der Updatevorgang?

    Folgendes Szenario:
    Ich stelle eine erste Version auf meiner Webseite bereit. Der Nutzer öffnet die URL und lädt sich die Dateien meiner WebApp zum ersten Mal herunter. Die Anwendung ist also ab diesem Moment offline verfügbar (mit Hinzufügen von Lesezeichen etc.). Weitere Internetverbindungen sind also dann nicht mehr erforderlich.
    Jetzt führe ich Änderungen an den Dateien durch und überschreibe die auf meiner Webseite bereits vorhandene Version 1 durch Version 2. Natürlich auch mit geändertem Manifest.

    Erkennt meine Offline-App jetzt automatisch, dass eine neue Version bereitsteht? Dazu müsste ja bei jedem Start wieder eine Internetverbindung hergestellt werden oder?
    Wird die neue Version automatisch heruntergeladen und im Cache abgelegt?
    Das Manifest muss immer den selben Dateiname haben, also bei mir example.appcache, egal bei welcher Version oder?

    Wozu gibt es die update()-Methode des window.applicationCache-Objekts? Damit starte ich den Prozess ja skriptseitig manuell. Ist das denn nötig, wenn alles automatisch abläuft?

    Vielen Dank schonmal für eure Antworten!

  • #2
    Schau Dir mal das hier an: http://www.html5rocks.com/de/tutoria...ache/beginner/ das erklärt eigentlich alle Fragen die Du hast. Falls danach noch welche übrig sind einfach nochmal fragen

    Comment


    • #3
      Erstmal vielen Dank für den Link.
      Allerdings ist es so, dass ich dieses Tutorial schon gelesen hatte.
      Der Artikel beschreibt nur das generelle Vorgehen und das Grundgerüst, klärt jedoch nicht meine konkreten Fragen dazu.

      Comment


      • #4
        Originally posted by altralaser View Post
        Aber wie schaut es mit der Datei info.html aus? Wird die auch gleich mit gecacht und ist damit dann auch gleich offline verfügbar oder wird die Seite erst heruntergeladen, wenn sie zum ersten Mal angezeigt wird?
        Kannst Du doch einfach selbst testen. Geh quasi nur auf den Startbildschirm. Dann wird das manifest geladen. Brich Deine Netzwerkverbindung ab und schaue ob Du auf info.html zugreifen kannst (wovon ich jetzt mal ausgehen würde, sonst wäre das ganze Konzept ja für den Popo )

        Originally posted by altralaser View Post
        Was passiert, wenn der Nutzer anschließend in seinem Browser auf "Neu laden" oder "Aktualisieren" klickt? Wird dann weiterhin die Offline-Version genutzt (also der Klick ignoriert) oder findet ein neuer Download aller Dateien statt?
        Aus dem Artikel zu wann werden neue Inhalte geladen:
        1. Der Nutzer löscht den Datenspeicher seines Browsers für die Website.
        2. Die Manifest-Datei wird geändert. Beachten Sie, dass eine Aktualisierung der im Manifest aufgeführten Datei nicht dazu führt, dass diese Ressource erneut im Cache gespeichert wird. Die Manifest-Datei selbst muss ersetzt werden.
        3. Der App-Cache wird programmatisch aktualisiert.

        Originally posted by altralaser View Post
        Erkennt meine Offline-App jetzt automatisch, dass eine neue Version bereitsteht? Dazu müsste ja bei jedem Start wieder eine Internetverbindung hergestellt werden oder?
        Der Browser erkennt an der Manifest Datei ob es eine neue Version gibt. In dem Artikel steht auch dass sich der Filename einer Datei im Manifest bei neuer Version ändern muss. Das Manifest selbst heisst immer gleich.

        Originally posted by altralaser View Post
        Wird die neue Version automatisch heruntergeladen und im Cache abgelegt?
        Das würde ich jetzt vermuten.

        Originally posted by altralaser View Post
        Wozu gibt es die update()-Methode des window.applicationCache-Objekts? Damit starte ich den Prozess ja skriptseitig manuell. Ist das denn nötig, wenn alles automatisch abläuft?
        Ich denke die Update Funktion ist für relativ spezielle Szenarien in denen man mehr Kontrolle braucht oder um im Falle einer lang laufenden App auch Updates Triggern zu können. Das Manifest wird vermutlich nur beim Start der Anwendung aufgerufen.



        Ach ja, falls Du nicht genau weisst wann welche Datei heruntergeladen wird und etwas mehr darüber wissen möchtest empfehle ich Dir Fiddler. Damit kannst Du den Netzwerkverkehr den Browser verursachen sehen. Dort siehst Du auch wann welches File angefordert wird und wann was aus dem Cache geholt wird. Damit kannst Du Dir bestimmt viele Deiner Fragen selbst beantworten

        Comment


        • #5
          Noch etwas: je nach Zielgruppe kann es auch wichtig sein in welchen Browsern das funktioniert. Hier kannst Du prüfen in welchen Browsern das Feature zur Verfügung steht:

          http://caniuse.com/#feat=offline-apps

          Comment


          • #6
            Alles klar, dann werde ich jetzt mal etwas experimentieren.
            Vielen Dank auf jeden Fall schonmal für deine Hilfe.

            Comment


            • #7
              Hallo,

              ich habe nun etwas experimentiert und noch ein Problem festgestellt, das ich mir nicht erklären kann.
              Ich habe eine Testanwendung unter Zuhilfenahme von jQuery Mobile gebaut. Die App soll unter iOS7 laufen.

              Den Webseiten habe ich das Manifest zugewiesen:

              Code:
              <html manifest="test.appcache">
              Das Manifest enthält dann meine eigenen Dateien sowie alle jQuery-Dateien (ich hoffe ich habe nichts vergessen):

              Code:
              CACHE MANIFEST
              index.html
              page1.html
              page2.html
              contact.html
              jquery-1.9.1.min.js
              jquery.mobile-1.3.0.min.css
              jquery.mobile-1.3.0.min.js
              images/ajax-loader.gif
              images/icons-18-black.png
              images/icons-18-white.png
              images/icons-36-black.png
              images/icons-36-white.png
              Jetzt führe ich die folgenden Schritte aus:

              1. Ich platziere alle Dateien auf meinem Webserver; der MIME-Typ "text/cache-manifest" ist korrekt gesetzt.
              2. Auf meinem Handy starte ich Safari und öffne die URL meiner App auf dem Server; die App wird korrekt angezeigt und sollte im appCache gespeichert worden sein.
              3. Nun tippe ich das Icon zum Hinzufügen der aktuellen Seite zum Homescreen.
              4. Anschließend aktiviere ich den Flugmodus um testhalber sämtliche Netzwerkverbindungen lahmzulegen.
              5. Ich starte die App vom Homescreen.

              Interessanterweise wird jetzt lediglich eine Fehlermeldung angezeigt, die mich darüber informiert, dass kein Zugriff auf's Internet möglich ist und für die Ausführung der App aber eine Netzwerkverbindung zwingend benötigt wird.
              Wenn ich dann den Schließen-Button tippe, verschwindet das Meldungsfenster und ich lande wieder auf dem Homescreen. Die App wird nicht gestartet.
              Ist das ein Bug oder ist das so gedacht? Hab ich bei der Verwendung des appCache irgendwas falsch gemacht?

              Vielen Dank

              Comment


              • #8
                Da würde ich jetzt schauen ob das z.B. auch bei Chrome auftritt. Dann weisst Du ob es ein Safari oder ein generelles Problem ist. Der Application Cache selbst hat auch Eventhandler. Dort kannst Du schauen ob der überhaupt mal was tut (z.B. auf Kommandozeile loggen oder den Text an die Seite selbst anhängen).

                Comment

                Working...
                X