地理定位超时获得用户权限

时间:2015-10-19 03:07:12

标签: javascript geolocation

我正在使用js获取用户地理位置,并希望解决以下情况:

我已经成功完成了1~4,但在5上遇到了问题。

主要问题是我无法判断浏览器何时开始获取该位置。

由于

ps:我在Geolocation.getCurrentPosition() https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition

使用api

---情景---

  1. 如果用户之前选择了地理位置权限,请在获取位置时暂停5秒。

  2. 如果用户点击“拒绝”,请立即返回null。

  3. 如果用户点击“允许”,请让浏览器获得5秒超时的地理位置

  4. 如果用户忽略了'允许/拒绝'提示,给它一个5秒超时(思考时间)并在用户仍然忽略提示时返回null。

  5. 如果用户忽略了'允许/拒绝'在5秒内提示,然后点击“允许”,再向用户/浏览器提供5秒钟以获取地理位置。

  6. ---一些代码----

    api.getGeoLocation = function() {
    
        var getGeoPromise = $q(function(resolve, reject){
    
            //give the timeout for user to decided
            var geoPromptTimout = $timeout(function(){
                reject();
            }, GEO_LOCATION_USER_PROMPT_TIMEOUT);
    
            $window.navigator.geolocation.getCurrentPosition(function(pos){
                $timeout.cancel(geoPromptTimout);
                resolve(pos);
            }, function(positionError) {
                $timeout.cancel(geoPromptTimout);
                reject();
            }, {
                timeout: GEO_LOCATION_ACQUIRE_TIMEOUT,
                maximumAge: GEO_LOCATION_CACHED_AGE
            });
        });
    
        return getGeoPromise;
    };
    

1 个答案:

答案 0 :(得分:0)

我最终使用$ q.defer.notify方法。

当用户忽略提示时,首先通知消费代码。

然后当用户在超时之前点击允许时,仍然在后台加载地理位置,并使用notify告诉消费代码再次成功获取地理位置。