Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 地理位置获取用户权限时超时_Javascript_Geolocation - Fatal编程技术网

Javascript 地理位置获取用户权限时超时

Javascript 地理位置获取用户权限时超时,javascript,geolocation,Javascript,Geolocation,我正在使用js获取用户地理位置,并希望解决以下场景: 我已经设法完成了1~4次,但5次出现问题 主要的问题是我不知道浏览器什么时候开始获取位置 谢谢 ps:我使用的api位于Geolocation.getCurrentPosition() ---情景--- 如果用户之前选择了地理位置权限,则在获取位置时给它5秒的超时时间 如果用户单击“拒绝”,则立即返回null 如果用户单击“允许”,则让浏览器在5秒超时后获取地理位置 如果用户忽略了“允许/拒绝”提示,请给它5秒的超时时间(思考时间),并在用户

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

我已经设法完成了1~4次,但5次出现问题

主要的问题是我不知道浏览器什么时候开始获取位置

谢谢

ps:我使用的api位于
Geolocation.getCurrentPosition()

---情景---

  • 如果用户之前选择了地理位置权限,则在获取位置时给它5秒的超时时间

  • 如果用户单击“拒绝”,则立即返回null

  • 如果用户单击“允许”,则让浏览器在5秒超时后获取地理位置

  • 如果用户忽略了“允许/拒绝”提示,请给它5秒的超时时间(思考时间),并在用户仍然忽略提示时返回null

  • 如果用户在5秒内忽略“允许/拒绝”提示,并单击“允许”,则再给用户/浏览器5秒钟时间获取地理位置

  • ---一些代码----


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

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

    然后,当用户在超时之前单击“允许”时,仍然在后台加载地理位置,并使用“通知”再次告知用户已成功获取地理位置的代码

    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;
    };