zoukankan      html  css  js  c++  java
  • html5离线应用相关api

    【html文件】


    <html manifest = "/offline.manifest">

    ...

    </html>



    【manifest文件】


    CACHE MANIFEST

    #v1


    CACHE:

    other.html

    hello.js

    images/myphoto.jpg


    NETWORK:

    http://lulingniu/notoffline

    *


    FALLBACK:

    online.js local.js


    1)CACHE类别中指定需要被缓存在本地的资源文件。当前页面会被自动缓存,不需显式写进来。路径可以用绝对路径,也可以用相对路径,相对路径是相对于manifest文件的位置的。


    2)NETWORK类别为显式指定不进行本地缓存的资源文件。此处罗列的文件在网络畅通的情况下都会直接路过缓存。如果你想网站内容在网络畅通的情况下及时更新,可以在此处使用*。


    3)FALLBACK类别中的每行中指定两个资源文件,第一个资源文件为能够在线访问时使用的资源文件,第二个资源文件为不能在线访问时使用的备用资源文件。


    4)每个类别都是可选的。



    【浏览器与服务器的交互过程


    首次访问www.abc.com:

    1)浏览器请求访问http://www.abc.com。

    2)服务器返回index.html网页。

    3)浏览器解析index.html网页,请求页面上所有资源文件,包括html文件、图像文件、css文件、js文件,以及manifest文件。

    4)服务器返回所有资源文件。

    5)浏览器处理manifest文件,请求manifest中所有要求本地缓存的文件,包括index.html页面本身,即使刚才已经请求过这些文件。如果你要求本地缓存所有文件,这将是一个比较大的重复的请求过程。

    6)服务器返回所有要求本地缓存的文件。

    7)浏览器对本地缓存进行更新,存入包括页面本身在内的所有要求本地缓存的资源文件,并且触发一个事件,通知本地缓存被更新。


    现在浏览器已经把本地缓存更新完毕。如果再次访问www.abc.com,而且manifest文件没有被修改过,它们的交互过程如下:

    1)浏览器请求访问http://www.abc.com。

    2)浏览器发现这个页面被本地缓存,于是使用本地缓存中index.html页面。

    3)浏览器解析index.html页面,使用所有本地缓存中的资源文件。

    4)浏览器向服务器请求manifest文件。

    5)服务器返回一个304代码,通知浏览器manifest没有发生变化。

    只要页面上的资源文件被本地缓存过,下次浏览器打开这个页面时,总是先使用本地缓存中的资源,然后请求manifest文件。


    如果再次访问www.abc.com,而且manifest文件已经被更新过了,那么浏览器与服务器之间的交互过程如下:

    1)浏览器再次请求http://www.abc.com。

    2)浏览器发现这个页面被本地缓存,于是使用本地缓存中index.html页面。

    3)浏览器解析index.html页面,使用所有本地缓存中的资源文件。

    4)服务器向服务器请求manifest文件。

    5)服务器返回更新过的manifest文件。

    6)浏览器处理manifest文件,发现该文件已被更新,于是请求所有要求进行本地缓存的资源文件,包括index.html页面本身。

    7)浏览器返回要求进行本地缓存的资源文件。

    8)浏览器对本地缓存进行更新,存入所有新的资源文件。并且触发一个事件,通知本地缓存被更新。


    需要注意的是,即使资源文件被修改过了,在上面第3中已经装入的资源文件是不会发生变化的,譬如图片不会突然变成新的图片,脚本文件也不会突然使用新的脚本文件。要使用更新后的文件,需要刷新页面。



    【applicationCache对象


    applicationCache对象代表了本地缓存,可以在js中进行一些操作。可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存。


    applicationCache.addEventListener("updateready",function(){

            alert("本地缓存已被更新,您可以刷新页面来得到本程序的最新版本");

    },true);


    一个比较有意思的用法:


    setInterval(function(){

            // 手工检查是否有更新

            applicationCache.update();    

    },5000);


    applicationCache.addEventListener("updateready",function(){

            if(confirm("本地缓存已被更新,需要刷新页面来获取应用程序最新版本,是否刷新?")){

                    // 手工更新本地缓存

                    applicationCache.swapCache();

                    // 重载页面

                    location.reload();

            }

    },true);



    【applicationCache对象的事件


    applicationCache可以监听的事件还有: 


    checking —— 浏览器发现网页具有manifest属性,触发checking事件,检查manifest文件是否存在。不存在时,触发error事件。


    noupdate —— 见downloading。


    downloading —— 浏览器检查到manifest文件,判断文件是否被更新,如果文件未更新,触发noupdate事件,否则触发downloading事件,然后开发下载这些资源。在下载的同时,周期性地触发progress事件。


    progress —— 见downloading。


    updateready —— 见cached。


    cached —— manifest文件中要求的缓存文件全部下载结束后,如果是首次缓存,触发cached事件,表示首次缓存成功,如果是更新manifest文件引起的重新下载,下载结束后不触发cached事件,而是触发updateready事件。


    error —— 见checking。



    首次访问网页时,依次触发的事件为:checking、downloading、progress、progress、cached


    再次打开网页,且manifest文件没有更新时:noupdate


    再次打开网页,且manifest文件已被更新时:downloading、progress、progress、updateready

  • 相关阅读:
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
    众王谈判三 谈判
    众王谈判二 来客
    众王谈判一 陨星
    边缘长梦
    Lua笔记
    来从蜀国游 5
    来从蜀国游 4
    来从蜀国游 3
    来从蜀国游 2
  • 原文地址:https://www.cnblogs.com/cly84920/p/4426466.html
Copyright © 2011-2022 走看看