getCurrentPosition仅在Firefox中触发一次

时间:2016-04-07 09:31:36

标签: javascript angularjs html5 geolocation

看看这段代码:

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"

我该怎么办?这是一个错误吗?

2 个答案:

答案 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;
    };
})