Как проверить отказ в доступе к геолокации JavaScript
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
navigator.geolocation.getCurrentPosition(
position => console.log('Доступ к геолокации предоставлен, координаты получены:', position),
error => error.code === 1 && console.log('Доступ к геолокации отклонён.')
);
Приведённая выше строчка кода проверяет, предоставил ли пользователь права на геолокацию с помощью navigator.geolocation.getCurrentPosition()
.
Понимание реакции пользователя на запрос о геолокации
Пользователь сам определяет, предоставит он права на геолокацию или нет. Исход может быть следующим:
- Ответ отсутствует: Пользователь ещё не дал ответ — необходимо дождаться его решения и действовать исходя из него.
- Разрешение предоставлено: Можно продолжать работу с функционалом геопозиций.
- Доступ отклонён: Пользователь не предоставил доступ — важно уважать его решение и предложить альтернативные методы: – Возможно, повторный запрос позже будет уместен, но это нужно сделать толково. – Предложить пользователю вручную указать местоположение. – Использовать определение геолокации по IP, несмотря на возможную неточность.
Главное — уважение к приватности и великолепный UX.
Более сложный контроль над разрешениями геолокации
Для более подробной работы с правами на геолокацию, рекомендую использовать следующие трюки:
Используйте
navigator.permissions.query({name: 'geolocation'})
для работы с объектом PermissionStatus и управления его состоянием с помощью async/await.В случае задержек или устаревших данных о местоположении, используйте параметры
maximumAge
иtimeout
вgetCurrentPosition
для корректировки этих моментов.
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.
- Применяйте градуальное уменьшение функциональности для поддержки устаревших браузеров.
- Внимательно относитесь к предупреждениям об устаревании методов в консоли.
Приспособление приложения к потребностям реальной среды — залог успеха.
Полезные материалы
- Geolocation API – Веб-API | MDN
- Geolocation API
- Определение вашего местоположения с помощью Geolocation | HTML5 Doctor
- Navigator.geolocation.getCurrentPosition иногда работает, а иногда нет – Stack Overflow
- Как проверить разрешения пользователя на местоположение в JavaScript?
- Promise – JavaScript | MDN
- Документация Modernizr