Как проверить отказ в доступе к геолокации JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
navigator.geolocation.getCurrentPosition(
  position => console.log('Доступ к геолокации предоставлен, координаты получены:', position),
  error => error.code === 1 && console.log('Доступ к геолокации отклонён.')
);

Приведённая выше строчка кода проверяет, предоставил ли пользователь права на геолокацию с помощью navigator.geolocation.getCurrentPosition().

Кинга Идем в IT: пошаговый план для смены профессии

Понимание реакции пользователя на запрос о геолокации

Пользователь сам определяет, предоставит он права на геолокацию или нет. Исход может быть следующим:

  1. Ответ отсутствует: Пользователь ещё не дал ответ — необходимо дождаться его решения и действовать исходя из него.
  2. Разрешение предоставлено: Можно продолжать работу с функционалом геопозиций.
  3. Доступ отклонён: Пользователь не предоставил доступ — важно уважать его решение и предложить альтернативные методы: – Возможно, повторный запрос позже будет уместен, но это нужно сделать толково. – Предложить пользователю вручную указать местоположение. – Использовать определение геолокации по IP, несмотря на возможную неточность.

Главное — уважение к приватности и великолепный UX.

Более сложный контроль над разрешениями геолокации

Для более подробной работы с правами на геолокацию, рекомендую использовать следующие трюки:

  • Используйте navigator.permissions.query({name: 'geolocation'}) для работы с объектом PermissionStatus и управления его состоянием с помощью async/await.

  • В случае задержек или устаревших данных о местоположении, используйте параметры maximumAge и timeout в getCurrentPosition для корректировки этих моментов.

JS
Скопировать код
async function checkGeolocationPermission() {
  try {
    const {state} = await navigator.permissions.query({name: 'geolocation'});
    console.log('Состояние разрешения геолокации:', state);
  } catch (error) {
    console.log('Текущий браузер не поддерживает API разрешений.');
  }
}

Подробный разбор отзывов при ошибках и PermissionStatus

Работа с обратными вызовами и API разрешений имеет свои преимущества:

  • Обратные вызовы помогают ясно понять, что доступ к геолокации отклонён.
  • С помощью maximumAge и timeout можно регулировать актуальность данных.

  • PermissionStatus упрощает отслеживание состояния разрешений, избавляет от лишних запросов к пользователю, также позволяет динамически реагировать на изменения разрешений с помощью обработчиков событий onchange.

При разработке реагируйте на совместимость с таргетовыми браузерами.

Визуализация

Представим отказ от геолокации как театральную драму в трёх действиях, где пользователь — главный герой:

Деяние пользователяАкт драмыСценарий JavaScript
Даёт разрешение🎭 Герой вступает в игру🎉 Доступ к геолокации предоставлен
Отказывает🎭 Герой выходит из игры😢 Доступ к геолокации отклонён
Игнорирует запрос🎭 Герой безучастен⏳ В ожидании действий героя

Дружелюбие к пользователю и плавность взаимодействия

Если доступ к геолокации отклонён, важно сохранить качественный UX:

  • Объясните, почему вам требуется доступ к его геолокации.
  • Предложите альтернативные варианты ручного ввода местоположения.
  • Не навязывайте пользователю запрос на доступ и уважайте его право на приватность.

Помните о правилах этики при работе с данными и обеспечивайте пользователю комфортное взаимодействие.

Совместимость с различными браузерами

Чтобы ваше приложение успешно работало в разных браузерах:

  • Используйте библиотеки для определения возможностей браузера, например, Modernizr.
  • Применяйте градуальное уменьшение функциональности для поддержки устаревших браузеров.
  • Внимательно относитесь к предупреждениям об устаревании методов в консоли.

Приспособление приложения к потребностям реальной среды — залог успеха.

Полезные материалы

  1. Geolocation API – Веб-API | MDN
  2. Geolocation API
  3. Определение вашего местоположения с помощью Geolocation | HTML5 Doctor
  4. Navigator.geolocation.getCurrentPosition иногда работает, а иногда нет – Stack Overflow
  5. Как проверить разрешения пользователя на местоположение в JavaScript?
  6. Promise – JavaScript | MDN
  7. Документация Modernizr