HTML5 geolocation 规范翻译

[size=large][b]摘要[/b][/size]
规范定义了脚本方式访问主机地理位置信息的API。

[size=large][b]安全和隐私[/b][/size]
因为地理位置信息涉及到个人隐私问题,所以API规范的者,为保护用户隐藏,应提供一种机制,由用户确认地理位置信息是否可通过此API访问。

[size=large][b]API描述[/b][/size]
script 以编程的方式使用Geolocation 对象,确定设备地理位置信息。
 [NoInterfaceObject]
interface NavigatorGeolocation {
readonly attribute Geolocation geolocation;
};

Navigator implements NavigatorGeolocation;

[NoInterfaceObject]
interface Geolocation {
void getCurrentPosition(PositionCallback successCallback,
optional PositionErrorCallback errorCallback,
optional PositionOptions options);

long watchPosition(PositionCallback successCallback,
optional PositionErrorCallback errorCallback,
optional PositionOptions options);

void clearWatch(long watchId);
};

callback PositionCallback = void (Position position);

callback PositionErrorCallback = void (PositionError positionError);

[size=medium][b]getCurrentPosition()[/b][/size]方法接收一个,两个,或者三个参数。调用时,它立即返回,并且通过异步的方式,尝试访问设备的当前位置信息。如果成功,successCallback被调用,传递参数为Position对象,Position表示当前设备的地理位置信息。如果失败,errorCallback 被调用,传递参数为PositionError对象,PositionError表示失败的原因。

实现getCurrentPosition方法需要执行如下步骤:
1. 运行前执行检查
(1)如果指定PositionOptions,并且maximumAge属性被定义为一个非负整数,使用这个值决定maximumAge是否可用。如果maximunAge被定义为负整数,设置maximunAge为0。
(2)如果指定PositionOptions,并且timeout属性被定义为一个非负整数,使用这个值决定timeout是否可用。如果timeout被定义为负整数,设置timeout为0。如果timeout未定义,设置timeout为无限大。
(3)如果指定PositionOptions,并且enableHighAccuracy属性被定义为一个非负整数,使用这个值决定enableHighAccuracy是否可用。其余情况,设置enableHighAccuracy为false。
2. 如果缓存Position对象,它的时长大于 maximumAge 变量,调用successCallback时使用缓存的Position对象作为参数,函数结束。
3. 如果timeout设置为0,调用errorCallback并传递PositionError对象,它的code属性被设置为TIMEOUT,函数结束
4. 开始位置获取操作(登台,通过调用特定于平台的API),有可能会使用到enableHighAccuracy变量。
5. 启动time事件,若超过timeout时长,则回调errorCallback方法。函数退出。
6. 如果调用成功,回调successCallback方法。函数退出。
7. 如果在超时前获取地理位置信息失败,则回调errorCallback,参数PositionError的code属性为POSITION_UNAVAILABLE。

[size=medium][b]watchPosition()[/b][/size]方法需要一个,两个或三个参数。在调用时,必须立即返回一个long值唯一标识表操作,然后异步启动获取位置操作。此操作必须首先尝试该设备取得当前的位置。如果尝试成功,successCallback被调用(即,必须调用回调对象的handleEvent操作),参数为一个新的位置对象,反映设备的当前位置。如果尝试失败,必须调用errorCallback,参数为一个新的PositionError对象,反映失败的原因。获取位置操作,然后必须继续监控设备的位置,并调用相应的回调,每次这个位置的变化。获取位置操作必须继续,直到用相应标识符作为参数调用clearWatch方法。

实现watchPosition方法需要执行如下步骤:
1. 运行前执行检查
(1)如果指定PositionOptions,并且maximumAge属性被定义为一个非负整数,使用这个值决定maximumAge是否可用。如果maximunAge被定义为负整数,设置maximunAge为0。
(2)如果指定PositionOptions,并且timeout属性被定义为一个非负整数,使用这个值决定timeout是否可用。如果timeout被定义为负整数,设置timeout为0。如果timeout未定义,设置timeout为无限大。
(3)如果指定PositionOptions,并且enableHighAccuracy属性被定义为一个非负整数,使用这个值决定enableHighAccuracy是否可用。其余情况,设置enableHighAccuracy为false。
2. 如果缓存Position对象,它的时长大于 maximumAge 变量,调用successCallback时使用缓存的Position对象作为参数,函数结束。
3. 注册监听事件,查看是否设备的位置已经更新(如wifi或者蜂窝信号发生变化)
4. 开始位置获取操作(登台,通过调用特定于平台的API),有可能会使用到enableHighAccuracy变量。
5. 运行如下步骤:
(1)如果记时器未运行,启动一个定时器的超时变量的值表示数毫秒后触发。当定时器触发,调用(如果存在)errorCallback,传递一个新的PositionError对象,它的code属性被设置的TIMEOUT,然后跳到步骤6.
(2)如果该位置采集操作成功产生一个新的位置,在超时到期前,执行以下步骤:
取消挂起的计时器。需要注意的是:必需重新启动定时器,该算法一次跳回到采集步骤的开始。
如果新的位置与先前的位置不同,调用successCallback并传递新的位置对象,它反映位置收集的结果。这一步可能会受到回调频率的限制。
(3)否则,如果在超时前获取地理位置信息失败,则回调errorCallback,参数PositionError的code属性为POSITION_UNAVAILABLE。这一步可能会受到回调频率的限制。
6. 等等接收系统事件,当接收到这样的事件跳回上述步骤。
[size=medium][b]clearWatch()[/b][/size]方法需要一个参数。在调用时,必须先检查的给予watchId的参数值。如果这个值不对应任何先前启动的守护进程,那么该方法必须立即返回,不采取任何进一步的行动。否则,由watchId参数确定收集位置的进程必须立即停止,不进行有进一步的回调。

另附一篇文章:
[url=http://www.uedsc.com/index.php/1826.html]HTML5 Geolocation规范提供了一套保护用户隐私的机制[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值