html5实际和离线应用分析

离线检測

想要开发离线Web应用第一步就得知道用户的设备的上网情况。HTML5为此定义了一个navigator.onLine属性,这个属性值为true的时候表示设备可以上网,表示false的时候表示设备不能上网。?

这个属性的关键在于浏览器必须知道设备可以訪问网络,从而返回正确的值。

在实际情况的应用下,navigator.onLine在不同浏览器之间有着差异。

IE6+和Safari 5+可以正确检測到网络已经断开,并将navigator.onLine的值转换成false。

Firefox 3+和Opera 10.6+支持navigator.onLine属性,可是必须手工选中菜单项”文件——Web开发者(设置)——脱机工作”才干让浏览器正常工作。

Chrome 11及曾经版本号始终将navigator.onLine属性设置为true。

因为navigator.onLine还是存在兼容性的问题。单独使用navigator.onLine属性不能确定网络的连通情况。所以。在请求错误发生的时候,检測这个属性是有必要的。以下是检測这个属性的小样例。

JavaScript代码

if(navigator.onLine){//正常上网}else{//运行离线状态时的任务}

除了navigator.onLine属性之外,还有两个事件:online和offline。当网络从离线变成在线,或者从在线变为离线的时候,分别触发这两个事件。online事件和offline事件使用的小样例例如以下

JavaScript代码

window.addEventListener(‘online‘,function(){alert("online")}, false);

window.addEventListener(‘offline‘,function(){alert("offline")}, false)

为了检測是否离线,页面载入之后。能够通过navigator..onLine属性取得初始状态。然后通过online事件和offline事件来确定网络连接状态是否变化。当online事件和offline事件发生变化的时候,navigator.onLine属性也会发生变化。

必须手工轮询这个属性才干检測到网络状态的变化。

支持离线检測的浏览器有Firefox 3+、Opera 10.6+、Chrome、IE6+(仅仅支持navigator.onLine属性)、Android版Webkit和iOS版Safari。

应用缓存

HTML5的应用缓存(application cache)。以下简称appcache。?

Appcache是专门为开发离线Web应用而设计的。Appcache是从浏览器的缓存中分出来的一块缓存区。在这块缓存区保存数据,能够使用一个描写叙述文件(manifest file),列出要下载和缓存的资源。

以下是一个简单的描写叙述文件小实例。

在最简单的情况下,描写叙述文件里列出的都是须要下载的资源,以备离线时使用。

设置描写叙述文件的选项比較多,在这里仅仅是一笔带过。大家想了解很多其它请打开网址:http://html5doctor.com/go-offline-with-application-cache。

在页面中必须将描写叙述文件与页面关联起来。能够在html标签中加入manifest属性,并指定文件的路径。小样例例如以下。

HTML代码

(html manifest="/offline.manifest")

offline.manifest代码

CACHE MANIFEST

#缓存文件

clock.html

clock.css

clock.js

上面的代码告诉页面。/offline.manifest中包括着描写叙述文件。这个文件的MIME类型必须是text/cache-manifest。

  尽管应用缓存的意图是确保离线时资源能够用,可是也有对应的JavaScript API让开发人员知道它都在做什么。这个API的核心是applicationCache对象。这个对象有一个status属性,属性值是常量,表示的状态例如以下。

  0:无缓存,即没有与页面相关的应用缓存。

  1:闲置,即应用缓存未得到更新。

  2:检查中。即正在下载描写叙述文件并检查更新。

  3:下载中。即应用缓存正在下载描写叙述文件里指定的资源。

  4:更新完毕,即应用缓存已经更新资源,并且全部资源都已下载完毕。能够通过swapCache()方法来使用了。

  5:废弃。即应用缓存存的描写叙述文件已经不存在了,因此页面无法再訪问应用缓存。

  应用缓存还有非常多相关的事件,表示其状态的改变。

相关事件例如以下

  checking:在浏览器为应用缓存查找更新时触发。

  error:在检查更新或下载资源期间错误发生时触发。

  noupdate:在检查描写叙述文件发现文件无变化时触发。

  downloading:在開始下载应用缓存资源时触发。

  progress:在文件下载应用缓存的过程中持续不断地触发。

  updateready:在页面新的应用缓存完成下载而且能够通过swapCache()使用时触发。

  cached:在应用缓存完整可用的时候触发。

  一般来讲。这些事件会随着页面载入按上述顺序依次触发。只是,通过调用update()方法也能够手工干预,让应用缓存为检測更新而触发上述事件。

  JavaScript代码

applicationCache.update();

  Update()一调用,应用缓存就会去检查描写叙述文件是否更新(触发checking事件)。然后就像页面刚刚载入一样,继续运行兴许操作。假设触发了updateready事件,说明新版本号的应用缓存已经可用,而此时你须要调用swapCache()方法来启用新应用缓存。

  JavaScript代码

applicationCache.addEventListener(‘updateready‘,function(){
        applicationCache.swapCache();
}, false);

  支持HTML5离线存储的浏览器有iOS 3.2+版Safari、Chrome、Android版Webkit、Firefox 3+、Safari 4+和Opera 10.6+。

在Firefox 4及曾经版本号中调用swapCache()方法会报错。

  HTML5实战与剖析之离线应用为大家介绍完了,这节主要为大家介绍了离线检測navigator.onLine属性的应用,和离线缓存的Appcache应用。

时间: 2024-08-04 22:48:46

html5实际和离线应用分析的相关文章

令人惊叹的HTML5动画及源码分析下载

HTML5非常酷,利用HTML5制作动画简直让我们忘记了这世界上还有flash的存在.今天我们要分享的一些HTML5动画都还不错,有些动画设计还是挺别出心裁的.另外,每一款HTML5动画都提供源代码下载,并且我们对源码作一些简单的分析. HTML5可爱的404页面动画 很逗的机器人 利用HTML5绘制的机器人,还会动哦.你可以将它作为一个富有创意的404页面. 核心CSS3代码: @-webkit-keyframes move { 0%, 100% { -webkit-transform: ro

HTML5学习之离线存储

STORAGE(存储) Cookie 在HTML5技术以前我们会使用 cookie,在浏览器端缓存一些数据,例如:登录用户信息,历史搜索信息等等.但是cookie所支持的容量仅仅只有 4k ,也没有专门的api来操作,只能依赖一些开源的库, 这里使用 cookies.js 存储和获取cookie信息 // 这是一个cookie值 Cookies.set('key', 'value'); // 链式调用 Cookies.set('key', 'value').set('hello', 'world

Js - 判断用户是否上网(连接网络) - HTML5在线、离线online的使用

(文中对兼容性的测试还未全部完成) 通过对html5的navigator新特性的onLine属性判断,可轻松搞定是否在线的判断(true:在线:false:离线). 兼容性: (已测)IE6+.Safari 5+支持的比较好: (未测)Firefox 3+也支持navigator.onLine属性,但你必须手工选中菜单项“文件-Web开发人员(设置)-脱机工作”才能让浏览器正常的工作: (未测)Chrome需要12以上: 1.代码实现: if(window.navigator.onLine==t

HTML5项目笔记5:使用HTML5 WebDataBase设计离线数据库

基于HTML5的Web DataBase 可以让你在浏览器中进行数据持久地存储管理和有效查询,假设你的离线应用程序有需要规范化的存储功能,那么使用Web DataBase,可以使你的应用程序无论是在离线或者在线或者网络不通畅情况下都可以将数据保存在客户端. 下面是HTML5 DataBase中两个不同的DataBase的比较,摘自http://www.html5rocks.com/en 上面的一篇文章. 我们这边使用WebSQL来设计和编写底层服务,W3C 的 WebDatabase 规范中说这

HTML5 --- navigator.onLine 离线检测

navigator.onLine,是一个属性,返回浏览器的联网状态.主要用于查看你是否连接上了互联网. 在正常联网的情况下会返回true,没有联网即离线的状态下返回false. 一旦浏览器的联网状态发生改变时,该属性值也会随之变化. // 查看你是否连接上了互联网,通过window.navigator.onLine 的值进行判断, // 如果是true,则说明连上了互联 if (navigator.onLine) { console.log("online"); }else{ cons

QQ空间玩吧HTML5游戏引擎使用比例分析

GameLook报道/“Cocos 2015开发者大会(春季)”于4月2日在国家会议中心圆满落下帷幕.在会上全新的3D编辑器,Cocos Runtime等产品重磅公布,给业界带来了Cocos这款国产引擎的最新动态.同时Cocos引擎创始人王哲也提到在目前国内最重要的HTML5游戏渠道玩吧中Cocos已经成为使用率最高的游戏引擎.那么这一数据是如何获取的呢?国内HTML5游戏渠道中目前现状究竟如何?今天我们让数据来说话. 直击现场 1.背景分析 2015年,HTML5平台可谓火爆异常,广大CP纷纷

[原]百度公交离线数据格式分析——2.从界面点击下载的流程

首先找到离线下载的界面(Activity),使用Apktool将APK包decode一下(Apktool的使用方法请参考官方文档).这样decode之后生成的是源文件是.smali格式的,在这里也可以使用其他工具(如dex2jar+Java Decompiler或者Procyon)直接输出可读性更好的java文件,但是由于java的反编译或多或少存在一些问题,尤其对于inner class (delvik 中的 synthetic 方法)支持都不好,我就直接用smali了.可以看到,代码进行了简

[原]百度公交离线数据格式分析——4.小结

还有两个问题没有解决. (1) prov_city_list.json 下载后,如果变为 com.baidu.bus.f.b 的对象的? 在 3.加载城市列表 的第 14 步中,hObject 的成员 c 被赋了一个值,类型就是 com.baidu.bus.f.a,向上找这个对象是如何生成的: invoke-static {v0, p1}, Lcom/baidu/bus/net/a/b;->a(Ljava/lang/String;Lcom/baidu/a/a/m;)Lcom/baidu/bus/

OpenStack快照分析:(一)从镜像启动的云主机离线快照分析

OpenStack虚拟机创建快照实际上是将虚拟机的磁盘创建为一个新的镜像,其操作实际就是创建镜像,我们可以通过dashboard页面或者命令行来调用对应的接口,创建快照的基本流程如下: 一. 获取token(获取token接口) 二. 查询虚拟机状态(查询接口) 三. 创建虚拟机快照 可以通过OpenStack提供的CLI命令创建快照: 通过OpenStack Dashboard或者nova命令可以发起快照,快照命令格式: nova image-create {server} {name} 下面