使用了JavaScript API的应用缓存可能是会有交互性的。这个API能够通过window.applicationCache去进行访问。
以下是API所支持的事件处理器:
- window.applicationCache.onchecking - 当浏览器去下载一个清单文件的时候该事件处理器将被调用,用于去检查该文件是否已经被更新。这个事件处理器通常是被调用的第一个事件。
- window.applicationCache.onnoupdate - 如果清单文件没有发生改变,那么在onchecking被调用以后,才会去调用该事件。这个事件处理器被调用以后,就不会有其他任何的事件处理器再被调用了。
- window.applicationCache.ondownloading - 如果清单文件的资源列表正在被下载,那么是因为他们在之前从没有下载过,或该清单文件已经被更新了,这个时候会调用该事件处理器,且该事件处理器是在onchecking被调用后执行。
- window.applicationCache.onprogress - 在清单文件中的每个文件列表被下载后,都会调用该事件。 这个事件传递给该处理器的是一个ProgressEvent所附加的一个属性,然而在所有的浏览器中去实现加载它是不可靠的。
- window.applicationCache.oncached - 当清单文件中的所有资源都已经被下载后,会调用该事件,且该事件是在ondownloading被调用后调用。该事件是所有事件中最后被调用的。
- window.applicationCache.onupdateready - 当一个已经存在的应用缓存被更新后,并且在清单文件中的所有资源都已被下载,这时会调用该事件,且该事件是在ondownloading被调用后调用。该事件是所有事件中最后被调用的。
- window.applicationCache.onobselete - 如果发送一个请求去访问清单文件,并返回404没有找到或410消失状态代码时,该事件会被调用。它用来说明这个清单文件没有被发现,并且该应用缓存将要被删除。该事件是所有事件中最后被调用的。
- window.applicationCache.onerror - 当发生一个错误的时候会调用该事件。在这个事件中会包括很多导致该错误的原因:当检索清单文件时发生的一个错误。当在应用缓存已经被更新的同时,在同样被更新的清单文件中检索资源列表时,发生的一个错误。该事件是所有事件中最后被调用的。
该API支持一下变量:
- window.applicationCache.status - 该变量表示一个能够被使用任何状态常量的值所解码的整数。(列表如下)
- window.applicationCache.UNCACHED - 没有使用应用缓存的页面状态。
- window.applicationCache.IDLE - 应用缓存的闲置状态。
- window.applicationCache.CHECKING - 当浏览器首次去下载清单文件时,检查该文件是否被更新的状态。
- window.applicationCache.DOWNLOADING - 该变量表示在清单文件中的资源列表正在被下载,并且该文件在之前从没有被下载过或该文件已经被更新过。
- window.applicationCache.UPDATEREADY - 该变量表示一个已存在的应用缓存已经被更新并且在清单列表中的所有资源已经被下载的状态。
- window.applicationCache.OBSOLETE - 该变量表示当向一个清单文件发送请求时会返回一个404没有找到或410状态消失的代码。
- window.applicationCache.update - 该方法触发了一个请求清单文件的进程,用于去检查该文件是否已经被更新,如果需要的话,可能还会去更新应用缓存。
- window.applicationCache.swapCache - 该方法把新旧缓存进行了一个替换,旧缓存通常被用于显示当前的页面,而新缓存则是在清单文件中发生变化时进行的更新。
使用应用缓存API最有效的方法之一是当应用缓存已经被更新后,它可以提示用户去及时更新页面。这能够帮助用户去解决在应用缓存调用双刷新机制的时候所遇到的问题,在我的下一篇名为《使用应用缓存所遇到的问题》的博客中会描述该细节。该代码如下:
另一个不太友好的方法是当你的应用缓存被更新后,他会去强制刷新你的页面。然而这可能会造成的结果是当清单文件被更新后,该页面会被加载两次。这个页面将会从应用缓存中首先去被立即加载,然后当应用缓存被更新后才会被刷新。对于比较快速的网络来讲,这是可以接受的。但是对于一个移动网络来讲,则不是一个好的体验。这段代码的方法将会去做如下事情:
另外使用该API能够在应用清单被更新或使用后,去运行一个小时轮询器来对其进行检查。除了上面提示用户去刷新页面的代码,它还能够确保用户总能获取到网站上的最新信息。
该文章英文出处http://blog.jamesdbloom.com/JavaScriptAndApplicationCache.html