ayiyiyia
ayiyiyia
  • 发布:2017-07-04 15:30
  • 更新:2017-07-05 16:08
  • 阅读:3702

getCurrentPosition调用后定位超时的问题

分类:HTML5+

function showLocation(position) {

alert("2");

var latitude = position.coords.latitude;

var longitude = position.coords.longitude;

}

function errorHandler(err) {

alert("1");

}

function getLocation(){

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(showLocation, errorHandler,{timeout:5000});

}else{

alert("3");

}

}

很简单的代码,在华为上没有问题,显示2,关掉位置,显示1,关掉网,5秒后显示1.但是在htc802w上,开着网和位置,5秒后显示1.不知道跟翻墙有没有关系,翻了也超时.感觉不像代码有问题,还请多多指教,多谢了

2017-07-04 15:30 1 条评论 负责人:无 分享
已邀请:
l***@live.com

l***@live.com

做过相关的Demo,跟测试机型的不同有关系的。

首先5秒的timeout对于定位来说太短了,基本上都会导致失败回调函数的执行。
10秒都不算多。

其次你在调用getCurrentPosition()方法时第三个参数option没有设置属性provider,
那么默认定位模块的默认顺序是amap-->baidu-->system;
高德我不清楚,百度是依赖GPS的,所以关掉GPS会导致定位失败;
若是开着GPS但关掉网,因为5秒timeout太短,所以到时间也会报1;
至于“在htc802w上,开着网和位置,5秒后显示1”,这个我有些不太清楚,理论上依靠WLAN
和4G定位的话,应该是很快的。猜想会不会是该型手机在开着GPS的情况下,默认优先使用GPS定
位,所以5秒后超时错误,报1。

我建议你timeout设置成Infinity,等于是取消超时报错;然后maximumAge设置为0(反正你
也没有写,默认也是0),保证每次定位都是获取最新的数据而不是缓存,这样使用体验可能会
好一些。

DCloud这套东西不错,可惜资料少了,我说的这些是根据我当时自己测试的实际情况分析的,
并不是官方或者权威可查的资料,你多改多试,也希望有别的大神来给出权威的说法。

该问题目前已经被锁定, 无法添加新回复