HTML5 geolocation 规范翻译

摘要
规范定义了脚本方式访问主机地理位置信息的API。

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

API描述
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);

       getCurrentPosition()方法接收一个,两个,或者三个参数。调用时,它立即返回,并且通过异步的方式,尝试访问设备的当前位置信息。如果成功,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。

        watchPosition()方法需要一个,两个或三个参数。在调用时,必须立即返回一个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. 等等接收系统事件,当接收到这样的事件跳回上述步骤。
        clearWatch()方法需要一个参数。在调用时,必须先检查的给予watchId的参数值。如果这个值不对应任何先前启动的守护进程,那么该方法必须立即返回,不采取任何进一步的行动。否则,由watchId参数确定收集位置的进程必须立即停止,不进行有进一步的回调。

另附一篇文章:
HTML5 Geolocation规范提供了一套保护用户隐私的机制

你可能感兴趣的:(JavaScript,html5)