看看这段代码:
navigator.geolocation.getCurrentPosition(function(){
console.log("a");
});
navigator.geolocation.getCurrentPosition(function(){
console.log("b");
});
https://jsfiddle.net/DerekL/sxb3j2bv/
在用户授予权限后,我希望控制台已记录
> "a"
> "b"
确实这就是Chrome中发生的事情。但是在Firefox上,出于某种原因它只会触发一次而只记录"b"
:
> "b"
我该怎么办?这是一个错误吗?
答案 0 :(得分:0)
我相信这种情况正在发生,因为第二次调用是在用户接受第一次调用的位置权限之前执行的。
但是,你可能想看一下
navigator.geolocation.watchPosition
而不是多次请求获得该职位。
答案 1 :(得分:0)
我通过重复使用先前请求的承诺来解决它:
// Note that this is using AngularJS
.service("demo_geolocation_service", function($q){
var ongoingRequest = false; // This is to deal with strange Firefox behavior
// where .getCurrentPosition only fires callback once
// even when called multiple times
return function(){
var deferred = $q.defer();
if(!ongoingRequest){
// store promise
ongoingRequest = deferred.promise;
navigator.geolocation.getCurrentPosition(function(pos){
deferred.resolve({latitude: pos.coords.latitude, longitude: pos.coords.longitude});
ongoingRequest = undefined;
}, function(){
deferred.reject();
ongoingRequest = undefined;
});
}else{
// reuse previous promise
ongoingRequest.then(function(latlng){
deferred.resolve(latlng);
}, function(){
deferred.reject();
});
}
return deferred.promise;
};
})