См. Редактирование ниже
Вы правы, обработчик ошибок должен сработать, когда пользователь отклоняет запрос местоположения. Объект ошибки, передаваемый в обработчик ошибок, должен содержать код ошибки и сообщение, сообщающее, что пользователь отклонил запрос. Однако я не вижу этого в FF4 при выборе опции Not Now
в диалоге запроса местоположения.
В Chrome API / обратные вызовы работают точно так же, как и ожидалось, но в Chrome 3-й вариант отсутствует.
РЕДАКТИРОВАТЬ
Аааа, ладно, я обнаружил небольшую причуду в поведении этого в FF4. В обычном режиме (не приватном просмотре) пользователю будут представлены 3 варианта:
- Всегда делиться
- Никогда не делись
- Не сейчас
Never share
правильно запускает обработчик ошибок, а Not Now
- нет.
Что это значит и как с этим справиться?
Ну, похоже, что если пользователь нажмет Not Now
, вы не получите ответ. Поэтому я бы установил таймаут, который проверяет флаг, который будет установлен одним из обработчиков. Если этот флаг не установлен (то есть обработчики не сработали за отведенное время), вы можете сделать одну из двух вещей:
- Предположим, что пользователь отклонил запрос (даже если отказ был временным)
- Вы можете снова запросить у пользователя разрешение (через тот же вызов), и пользователю снова будет показано диалоговое окно.
Вариант 2, вероятно, является плохим юзабилити (и раздражает), поэтому, вероятно, лучше предположить, что они временно отказались, и спросить их снова (вежливо!) При следующем посещении сайта.
Я создал JsFiddle для игры с этим API:
http://jsfiddle.net/7yYpn/11/