jas*_*ton 8 javascript geolocation w3c-geolocation
好的,我的代码在下面,所以我将解释我正在做什么以及我得到的结果.
我正在尝试使用navigator.geolocation.watchPosition获取用户位置.我已经指定了成功和错误回调.我第一次得到这个位置通常是非常不准确所以我使用watchPosition继续获取位置,直到它尝试了4次或者得到一个精确到500米以内的位置.
我遇到的问题:
它永远不会进入Android的错误回调(在HTC Sensation和三星Galaxy S3上测试).然而,在iPhone上,它似乎在50%的时间内输入错误回调.
它也永远不会超时.它一直在搜索,直到它收到一个位置.
我搜索了许多论坛帖子和许多stackoverflow问题以及地理定位和其他任何文档的规范.关于它的信息不多,更不用说这些问题了.有没有我做错了?或者这只是与位置合作的本质?
if(navigator.geolocation){
var geo_count = 0;
var wpid = navigator.geolocation.watchPosition(success, error, {
enableHighAccuracy: true,
maximumAge: 0,
timeout: 10000
});
function success(position){
alert(position.coords.accuracy)
geo_count = geo_count + 1;
if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){
navigator.geolocation.clearWatch(wpid);
alert('position obtained!');
}
else if(geo_count > 4){
navigator.geolocation.clearWatch(wpid);
alert('inaccurate position obtained');
}
}
function error(error){
switch(error.code){
case 1:
alert('permission denied');
break;
case 2:
alert('position unavailable');
break;
case 3:
alert('timeout');
break;
default:
alert('unknown error');
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我建议使用以下方法进行检查:
if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') {
...
}
Run Code Online (Sandbox Code Playgroud)
“Geolocation.watchPosition() 方法用于注册一个处理函数,每次设备位置发生变化时都会自动调用该函数。您还可以选择指定错误处理回调函数。”
也许它不会触发,因为位置仍然相同?^^
尝试使用 Geolocation.getCurrentPosition() 与 Interval 或 Webworker 进行调试:https://developer.mozilla.org/en-US/docs/Web/API/Geolocation
祝你好运