由于涉及到隐私以及安全方面的考虑,在使用geolocation进行定位的时候,浏览器会询问用户是否允许共享位置信息;当用户进行“允许”或“不允许”操作之后,一般浏览器都会对当前站点缓存这个操作方式,这个的有效时间我也不太清楚!下次进入改站点时,将不会再弹出。用户拒绝之后无法获取位置,可以通过IP定位的方式进行定位,前提你得有一个相应的服务支持。希望对你有帮助
navigator.geolocation.getCurrentPosition(on_success, on_error, options);
获得地理位置
下面是函数on_success的写法示例。它有一个参数,你将最终通过这个函数获取到用户的位置。经纬度分别存在longitude和latitude变量中,同时还有精度、时间戳,以及一些其他额外信息:
function on_success(pos) {
// 将会获得以下信息
var latitude = pos.coords.latitude;
var longitude = pos.coords.longitude;
var accuracy = pos.coords.accuracy;
var timestamp = pos.timestamp;
// 以下信息不一定提供,和具体设备有关
var altitude = pos.coords.altitude;
var altitudeAccuracy = pos.coords.altitudeAccuracy;
var heading = pos.coords.heading;
var speed = pos.coords.speed;
}
其中altitude、altitudeAccuracy、heading和speed则根据用户的终端不同,可能提供,可能为null。
错误处理
上面我们还有一个on_error。显然,如果用户不同意,那我们无法获得任何信息,这时候系统会自动调用这个函数。
function on_error(error) {
console.log(error.message);
if (error.code == error.PERMISSION_DENIED) {
console.log("User denied Geolocation.");
} else // handle other cases...
}
其中error.code为一个枚举类型,可能的取值如下:
PERMISSION_DENIED:用户拒绝
POSITION_UNAVAILABLE:地理位置获取失败(可能是用户没网或卫星搜不到等原因)
TIMEOUT:地理位置获取超时
而error.message则为一个可以帮助开发者调试的错误信息(此信息一般不适合直接显示在网页中给用户查看)。