Due to firefox's issue not getting feedback from user on prompting that website needs to access your location when user clicking "Not now", X or outside prompt box (more here), below is a tiny example to trigger fallback action for this case. Plunker
// GeoLocationService
angular.module('myApp').factory('GeoLocationService', function($q, $window, $timeout) {
var factoryObj = {};
factoryObj.getPosition = function() {
var deferred;
var promiseTimeout = $timeout(function() {
deferred.reject(1); // return 1 if browser waited for user input for more than timeout delay
}, 3000);
deferred = $q.defer();
if(!$window.navigator.geolocation) { // check if geoLocation is not supported by browser
$timeout.cancel(promiseTimeout);
deferred.reject(false); // return false if geoLocation is not supported
}
else { // geoLocation is supported
$window.navigator.geolocation.getCurrentPosition(function(position) {
$timeout.cancel(promiseTimeout);
return deferred.resolve(position);
}, function(error) {
$timeout.cancel(promiseTimeout);
return deferred.reject(error.code || 1);
});
}
return deferred.promise;
};
return factoryObj;
});
And your app js.
// App
var app = angular.module('myApp', []).controller('myCtrl', function($scope, $log, GeoLocationService) {
$scope.position = {};
GeoLocationService.getPosition().then(
function(position) { //
$scope.position = position;
$log.debug(position);
},
function(errorCode) {
if(errorCode === false) {
alert('GeoLocation is not supported by browser.');
}
else if(errorCode == 1) {
alert('User either denied GeoLocation or waited for long to respond.');
}
}
);
});