我正在使用js获取用户地理位置,并希望解决以下情况:
我已经成功完成了1~4,但在5上遇到了问题。
主要问题是我无法判断浏览器何时开始获取该位置。
由于
ps:我在Geolocation.getCurrentPosition()
https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition
---情景---
如果用户之前选择了地理位置权限,请在获取位置时暂停5秒。
如果用户点击“拒绝”,请立即返回null。
如果用户点击“允许”,请让浏览器获得5秒超时的地理位置
如果用户忽略了'允许/拒绝'提示,给它一个5秒超时(思考时间)并在用户仍然忽略提示时返回null。
如果用户忽略了'允许/拒绝'在5秒内提示,然后点击“允许”,再向用户/浏览器提供5秒钟以获取地理位置。
---一些代码----
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;
};
答案 0 :(得分:0)
我最终使用$ q.defer.notify方法。
当用户忽略提示时,首先通知消费代码。
然后当用户在超时之前点击允许时,仍然在后台加载地理位置,并使用notify告诉消费代码再次成功获取地理位置。