Редактировать (после понижения) 6-11-2013
Как отмечено ниже под этим ответом, это не решает проблему, когда пользователь отказывает в доступе к местоположению.Для понижения это правильно.Я держу ответ здесь, потому что время ожидания так или иначе нужно использовать, и я не вижу его ни в одном ответе.
Функция navigator.geolocation.getCurrentPosition () имеет возможность отправить время ожидания вместе с ним:
navigator.geolocation.getCurrentPosition(
function (position){
//do someting with position
},
function (error){
// do something with the error (like the code)
},
{timeout:10000}
);
и некоторые другие параметры, такие как возраст кэшированной позиции (MaximumAge).время ожидания и максимальное значение указываются в миллисекундах, поэтому 10000 = 10 секунд.
Кстати, время ожидания по умолчанию бесконечно ... поэтому, если вы не установите время ожидания, оно никогда не вызовет обратный вызов для ошибок....
поэтому в ответе Джейми я бы сказал:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
success(position);
}, showError, {timeout:3000});
}