第八章:HTML5离线应用及地理位置应用
1.离线应用的工作原理
1.浏览器缓存只针对单个网页,本地缓存针对的是整个Web应用
2.浏览器缓存所有浏览过的页面,本地缓存可缓存指定页面
3.浏览器缓存信息不可人为的控制,本地缓存可人为控制
2.管理本地缓存
离线存储是通过manifest文件夹来管理的,需要服务器端的支持
manifest文件是一个扩展名为'.manifest'的简单文本文件
该文件用于配置哪些资源文件需要被缓存,哪些不需要缓存
同时资源文件的访问路径也需要在manifest中进行配置
配置好manifest文件后,在页面中通过HTML元素的manifest属性指定
当前的manifest文件
页面加载时将自动缓存manifest中配置的资源文件
一个标准的manifest文件主要包含以下几个节点
1.CACHE:表示在离线状态下,浏览器需要缓存到本地资源文件列表
2.NETWORK:表示在在线状态下,需要访问的资源文件列表
配置在NETWORK列表中的资源文件,只有在客户端与服务器建立通信时才能被访问
FALLBACK:配置信息成对出现,前面的资源文件不可访问时,将使用后面的文件进行访问
CACHE MANIFEST
#version 0.0.0
CACHE:
JS/test.js
Css/test.css
NETWORK:
index.apsx
FALLBACK:
/Project/index.apsx /Bak/Project/index.apsx
3.applicationCache检测及更新缓存
3.1 status
status属性用于返回是否有可更新的本地缓存信息
返回值0说明表示本地缓存不存在或处于不可用状态
返回值1说明表示本地缓存内容已经为最新状态,无需更新
返回值2说明表示正在检查manifest文件状态,判断该文件配置是否发生变化
返回值3说明表示已经确定manifest文件状态,正在下载
返回值4说明表示本地缓存内容已经更新
返回值5说明表示本地缓存已经被删除
3.2updataeReady事件
用于检测本地缓存是否更新完毕
当manifest文件被更新且浏览器载入新的资源文件时会被触发
3.3 swapCache方法
用于手动更新本地缓存信息,只能在applicationCache的updataReady事件触发时调用
3.4 update事件
手动更新本地缓存
4.检测在线状态
4.1 onLine
navigator.onLine
4.2 offLine
5.Geolocation的工作原理
5.1 GPS信息
5.2 IP定位
5.3 无线网络定位
6.获取当前地理位置
getCurrentPosition(onSuccess,onError,[,options])
6.1 onsuccess回调函数
navigator.geolocation.getCurrentPosition(function(position){
var coords=position.coords;//获取coords对象
var latitude=coords.latitude;//获取维度
var longtitude=coords.longtitude;//获取经度
})
6.2 onerror回调函数
function(error){
switch(error.code) {
case error.TIMEOUT:
alert("超时!");
break;
case error.POSITION_UNAVAILABLE:
alert('无法检测当前位置信息!');
break;
case error.PERMISSION_DENIED:
alert('当前浏览器设置不允许共享位置信息!');
break;
case error.UNKNOWN_ERROR:
alert('未知错误!');
break;
}
}
6.3 options参数
enableHighAccuracy 用于指定是否要求高精度的地理位置信息
timeout:用于指定获取地理位置的超时时间
maximumAge:用于指定地理位置信息缓存的有效时间
7.监视地理位置信息
watchCurrentPosition方法可以定期、持续获得当前用户的地理位置信息
watchCurrentPosition(onSuccess,onError,[,options])
8.停止获取当前地理位置信息
clearWatch方法可以设置停止获取当前用户的地理位置信息
clearWatch(watchID)
watchID为watchCurrentPosition方法的返回值
9.案例
<!DOCTYPE html >
<html>
<head runat="server">
<script type="text/JavaScript" src="http://api.go2map.com/maps/js/api_v2.0.js">
</script>
<script type="text/JavaScript">
var map,mapsEventListener;
function initialize1() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function(position){
var coords = position.coords;
var latitude = coords.latitude; //获取纬度
var longitude = coords.longitude; //获取经度
//开始调用搜狗地图API
var myLatlng = new sogou.maps.LatLng(latitude,longitude);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: sogou.maps.MapTypeId.ROADMAP
}
map = new sogou.maps.Map(document.getElementById("map_canvas"), myOptions);
var marker = new sogou.maps.Marker({
position: myLatlng,
map: map,
title:"您当前的位置"
});
var infowindow = new sogou.maps.InfoWindow({ content: "经度:"+longitude+"纬度:"+latitude});
mapsEventListener=sogou.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
},
function(error){
switch(error.code) {
case error.TIMEOUT:
alert("超时!");
break;
case error.POSITION_UNAVAILABLE:
alert('无法检测当前位置信息!');
break;
case error.PERMISSION_DENIED:
alert('当前浏览器设置不允许共享位置信息!');
break;
case error.UNKNOWN_ERROR:
alert('未知错误!');
break;
}
}
);
}
}
</script>
</head>
<body onload="initialize1()">
<div id="map_canvas" style="width: 500px; height: 500px"></div>
</body>
</html>