Как обнаружить отрицательный ответ пользователя для геолокации - PullRequest
12 голосов
/ 17 июня 2011

При использовании API геолокации navigator.geolocation.getCurrentPosition() как бороться с отрицательным ответом?

Он говорит, что вторая функция обратного вызова вызывается при возникновении ошибки.Однако, когда пользователь решает не раскрывать свое местоположение путем отмены запроса, эта функция никогда не запускается.

Кажется, что getCurrentPosition() ждет ответа бесконечно.(по крайней мере, в Firefox 4)

Как узнать, когда пользователь нажимает кнопку отмены (или нет и т. д.)

Есть идеи?

Ответы [ 2 ]

16 голосов
/ 17 июня 2011

См. Редактирование ниже
Вы правы, обработчик ошибок должен сработать, когда пользователь отклоняет запрос местоположения. Объект ошибки, передаваемый в обработчик ошибок, должен содержать код ошибки и сообщение, сообщающее, что пользователь отклонил запрос. Однако я не вижу этого в FF4 при выборе опции Not Now в диалоге запроса местоположения.

В Chrome API / обратные вызовы работают точно так же, как и ожидалось, но в Chrome 3-й вариант отсутствует.

РЕДАКТИРОВАТЬ
Аааа, ладно, я обнаружил небольшую причуду в поведении этого в FF4. В обычном режиме (не приватном просмотре) пользователю будут представлены 3 варианта:

  • Всегда делиться
  • Никогда не делись
  • Не сейчас

Never share правильно запускает обработчик ошибок, а Not Now - нет.

Что это значит и как с этим справиться?

Ну, похоже, что если пользователь нажмет Not Now, вы не получите ответ. Поэтому я бы установил таймаут, который проверяет флаг, который будет установлен одним из обработчиков. Если этот флаг не установлен (то есть обработчики не сработали за отведенное время), вы можете сделать одну из двух вещей:

  1. Предположим, что пользователь отклонил запрос (даже если отказ был временным)
  2. Вы можете снова запросить у пользователя разрешение (через тот же вызов), и пользователю снова будет показано диалоговое окно.

Вариант 2, вероятно, является плохим юзабилити (и раздражает), поэтому, вероятно, лучше предположить, что они временно отказались, и спросить их снова (вежливо!) При следующем посещении сайта.


Я создал JsFiddle для игры с этим API:

http://jsfiddle.net/7yYpn/11/

1 голос
/ 04 сентября 2018

Я не думаю, что это ошибка, но преднамеренный выбор, когда нужно усложнить создание веб-сайтов, которые предоставляют нежелательные функциональные возможности ... (как подразумевается в верхнем ответе; ЕСЛИ вы запрашиваете снова, когда кто-то уже сказал "нет") довольно раздражает ...) ...

Разница между "не сейчас" .. и "никогда" .. заключается в том, что программист веб-сайта ЗНАЕТ ... что, если "не сейчас" было запущено ..., пользователю будет отправлено действительное приглашение, ЕСЛИ он отправит запрос снова .. следовательно, он сможет "заставить" руку пользователя ЛИБО принять его ... или просто заблокировать данные, пока пользователь не согласится ..

Достойные и уважительные программисты хотят использовать такую ​​информацию, чтобы лучше предоставлять услугу (и не ждать того, что не произойдет) ... но правда в том, что существует достаточно спаммеров, чтобы подавить конечного пользователя ..

(и нет необходимости даже пытаться отправить запрос еще раз, если на него ответили «никогда» .. потому что .. пользователь не будет подвергаться терроризму таким же образом ... и если сайт станет вялым и не отвечает, пользователь просто закроет его)

Ps. ОН, и СЕРЬЕЗНЫЕ программисты могут фактически принять отклонение как фактическое ... отклонение ... и сохранить этот выбор где-то ... несмотря на то, что "не сейчас" на самом деле не подразумевается как АБСОЛЮТНОЕ отклонение, а скорее как "я решил не занимать какую-либо определенную позицию на данный момент ".. так .. кто-то, кто скажет" не сейчас ".. если сервер знает об этом выборе и принимает его как" нет "... тогда НИКОГДА не может быть отправлен другой запрос .. несмотря на человека, желающего иметь возможность пересмотреть на более поздний срок)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...