<geolocation> HTML-элемент геолокации
Ограниченная доступность
Эта функция не входит в Baseline, поскольку не работает в некоторых наиболее широко используемых браузерах.
Экспериментальная: Это экспериментальная технология
Перед использованием в рабочей среде внимательно изучите таблицу совместимости браузеров.
Элемент <geolocation> HTML создаёт интерактивный элемент управления, с помощью которого пользователь может предоставить странице данные о своём местоположении.
Он обеспечивает:
- Интуитивно понятный интерфейс, определяемый браузером.
- Процесс обработки разрешений, необходимых для функции
geolocation. - Функции API для доступа к данным о местоположении и реакции на полученные данные о местоположении и изменения разрешений.
Атрибуты
Этот элемент включает глобальные атрибуты.
autolocate-
Логический атрибут, который при значении
trueуказывает, что браузер должен немедленно получить данные о местоположении при отображении элемента<geolocation>, если разрешение было предоставлено ранее. Если установлено значениеfalse, данные о местоположении не будут получены, пока пользователь не активирует элемент управления. По умолчанию —false.Если разрешение не было предоставлено ранее, этот атрибут не действует.
watch-
Логический атрибут, который при значении
trueуказывает, что браузер должен получать данные о местоположении при каждом изменении положения устройства пользователя. Если установлено значениеfalse, данные о местоположении будут получены только один раз. По умолчанию —false.
Описание
Элемент <geolocation> предоставляет элемент управления для передачи данных о местоположении, интерфейс которого задаётся браузером. Например, в Chrome на кнопке отображается значок «булавки на карте» и понятный текст («Use location» в англоязычном интерфейсе).
Он также позволяет интуитивно управлять разрешениями пользователя. Например, в Chrome, если пользователь ранее запретил доступ к данным о местоположении или закрыл диалоговое окно запроса разрешения, не сделав выбор, он может снова нажать кнопку, чтобы изменить свой выбор. Если пользователь ранее запретил доступ, в последующих диалоговых окнах ему сообщат, что он уже запрещал передачу данных о местоположении, и спросят, хочет ли он и дальше запрещать её или разрешить.
Ключевой аспект элемента <geolocation> заключается в том, что он отражает осознанный выбор пользователя и блокирует возможные способы обманом заставить пользователя невольно предоставить данные о своём местоположении (подробнее см. в разделе блокировка <geolocation>).
Интерфейс DOM API этого элемента, HTMLGeolocationElement, предоставляет средства для доступа к возвращённым данным о местоположении, текущему состоянию разрешения и сведениям об ошибках, если получить данные не удалось. Это позволяет сократить объём необходимого кода JavaScript. Также доступны события, позволяющие выполнять код в ответ на получение данных о местоположении, изменение состояния разрешения и взаимодействие пользователя с диалоговым окном разрешения.
Примечание: Из соображений производительности на одной странице допускается не более трёх элементов <geolocation>. Если это ограничение превышено, функциональность всех элементов <geolocation> отключается.
Связь с Geolocation API
Geolocation API — это более старый альтернативный способ работы с данными о местоположении. У этого API есть ряд недостатков, которые призван устранить элемент <geolocation>. Самый существенный из них заключается в том, что пользовательский интерфейс и основную логику запроса данных каждый раз необходимо реализовывать с нуля, а обработка разрешений может быть неинтуитивной.
Элемент <geolocation> в фоновом режиме использует возможности Geolocation API. По умолчанию браузер запрашивает данные о местоположении один раз, как если бы был вызван метод Geolocation.getCurrentPosition(). Однако, если для атрибута watch установлено значение true, браузер обновляет данные при каждом изменении положения устройства, как если бы был вызван метод Geolocation.watchPosition().
Если данные успешно получены, они доступны в свойстве HTMLGeolocationElement.position, содержащем объект GeolocationPosition. Если получить данные не удалось, сведения об ошибке доступны в свойстве HTMLGeolocationElement.error, содержащем объект GeolocationPositionError.
Настройка языка кнопки
Глобальный атрибут lang используется элементом <geolocation> для выбора языка отображаемого текста. Это означает, что можно задать атрибут lang непосредственно для элемента <geolocation> или одного из его предков, чтобы указать браузеру, на каком языке отображать текст кнопки.
Если подходящий атрибут lang не задан, используется предпочитаемый язык браузера.
Добавление резервного содержимого
Между открывающим и закрывающим тегами элемента <geolocation> можно добавить резервное содержимое, которое будет отображаться, если этот элемент не поддерживается. Например, можно добавить сообщение «Не поддерживается»:
<geolocation> <p>Your browser doesn't support the Geolocation element.</p> </geolocation>
Однако для реального использования лучше добавить обычный элемент <button>, который использует Geolocation API для получения данных о местоположении:
<geolocation> <button id="fallback">Use location</button> </geolocation>
Блокировка <geolocation>
Одна из ключевых идей, лежащих в основе элемента <geolocation>, заключается в том, что он должен отражать осознанный выбор пользователя раскрыть сведения о местоположении и не позволять злоумышленникам обманом заставлять пользователей активировать его, например с помощью кликджекинга. Поэтому браузер хранит так называемые причины блокировки для каждого отображённого элемента.
Если для элемента <geolocation> действует блокировка, он не может функционировать (заблокирован) — временно или навсегда, в зависимости от причины. Заблокированный элемент <geolocation> считается недействительным. Проверить, является ли он недействительным, можно с помощью свойства HTMLGeolocationElement.isValid. Причину недействительности можно получить с помощью свойства HTMLGeolocationElement.invalidReason — полный список возможных причин см. на этой странице.
Ограничения стилизации
Для элемента <geolocation> предусмотрен ряд ограничений на CSS-стили, которые можно к нему применить. Некоторые из них предназначены для обеспечения основных требований доступности; при их несоблюдении кнопка деактивируется. Другие задают определённые значения или диапазоны значений для различных свойств.
Любые свойства, не перечисленные в следующих подразделах и не являющиеся логически эквивалентными физическим свойствам, перечисленным в следующих подразделах, игнорируются при задании для элемента <geolocation>.
Ограничения доступности
Отображаемая кнопка <geolocation> деактивируется (нажатие на неё не даст эффекта), если не соблюдены следующие ограничения:
- Контрастность цветов
colorиbackground-colorдолжна быть не ниже 3:1. - Значение
font-sizeне должно быть меньше значенияsmall(для ключевых слов) или его вычисленного значения (для других типов значений).
Ограничения значений
Для элемента <geolocation> действуют следующие ограничения на значения CSS-свойств. Если предпринята попытка задать для элемента <geolocation> значения, выходящие за указанные ограничения, значение корректируется до соответствующего ограничения (для точного ограничения значения) или до ближайшей вычисленной верхней или нижней границы (для ограничения диапазона).
opacity-
1.0 line-height-
normal white-space-
nowrap user-select-
none appearance-
auto box-sizing-
content-box vertical-align-
middle text-emphasis-
initial text-shadow-
initial outline-offset-
0или больше. font-weight-
200или больше. word-spacing-
От
0до0.5emвключительно. letter-spacing-
От
-0.05emдо0.2emвключительно. letter-spacing-
От
-0.05emдо0.2emвключительно. min-height-
1emили больше. max-height-
3emили меньше. Значениеnoneдопустимо. min-width-
Вычисленное значение
fit-contentили меньше. border-width-
1emили меньше.
Сложные ограничения
Следующие ограничения сложнее, чем простые ограничения значений:
- Внутренний отступ в блочном направлении
-
Если для
block-sizeзадано значениеauto, свойстваpadding-block-startиpadding-block-end(а также соответствующие физические свойства для текущего режима письма) ограничены максимальным значением1emи должны быть равны. - Внутренний отступ во встроенном направлении
-
Если для
inline-sizeзадано значениеauto, свойстваpadding-inline-startиpadding-inline-end(а также соответствующие физические свойства для текущего режима письма) ограничены максимальным значением5emи должны быть равны.
Свойства, которые можно задавать обычным образом
Следующие CSS-свойства можно использовать обычным образом:
font-kerningfont-optical-sizingfont-stretchfont-synthesis-weightfont-synthesis-stylefont-synthesis-small-capsfont-feature-settingsforced-color-adjusttext-renderingalign-selfanchor-nameaspect-ratio-
border,border-top,border-right,border-bottomиborder-left clearcolor-schemecontain-intrinsic-widthcontain-intrinsic-heightcontainer-namecontainer-type-
counter-reset,counter-incrementиcounter-set -
flex,flex-grow,flex-shrinkиflex-basis floatheightisolationjustify-selfleftorderorphans-
outline,outline-colorиoutline-style overflow-anchor-
overscroll-behavior,overscroll-behavior-inline,overscroll-behavior-block,overscroll-behavior-xиoverscroll-behavior-y pagepositionposition-anchorright-
scroll-margin,scroll-margin-top,scroll-margin-right,scroll-margin-bottomиscroll-margin-left -
scroll-padding,scroll-padding-top,scroll-padding-right,scroll-padding-bottom,scroll-padding-left,scroll-padding-inline-start,scroll-padding-block-start,scroll-padding-block-start,scroll-padding-inline-endиscroll-padding-block-end text-spacing-trimtext-transformtopvisibilityxyruby-positionuser-selectwidthwill-changez-index
Доступность
У элемента <geolocation> есть доступное имя, заданное на установленном для него языке. Кроме того, ему назначена role button, благодаря которой программы экранного доступа распознают его как кнопку.
Кроме того, элементу <geolocation> по умолчанию задано значение 0 для tabindex, поэтому в отношении фокуса клавиатуры он ведёт себя как настоящий элемент <button>.
Наконец, сведения об ограничениях стилизации элемента <geolocation>, установленных для обеспечения основных требований доступности, приведены в разделе Ограничения доступности.
Примеры
>Пример базового использования
В этом примере элемент <geolocation> используется для получения вашего текущего местоположения, которое выводится под кнопкой в элементе <p>. В примере также предусмотрен обычный резервный вариант <button> для получения данных о местоположении в браузерах, не поддерживающих этот элемент.
HTML
Мы добавляем элемент <geolocation> с вложенным резервным вариантом <button>, который будет отображаться в браузерах, не поддерживающих <geolocation>. Также добавляем элемент <p>, в который будут выводиться данные о местоположении и ошибки.
<geolocation> <button id="fallback">Use location</button> </geolocation> <p id="output"></p>
JavaScript
В нашем скрипте сначала получаем ссылку на выходной элемент <p>. Затем проверяем поддержку элемента <geolocation> с помощью typeof HTMLGeolocationElement === "function":
- Если элемент поддерживается, сначала получаем ссылку на элемент
<geolocation>, а затем добавляем обработчик событияlocation. Когда пользователь нажимает кнопку и данные получены, обработчик выводит координаты (широту и долготу) в выходной элемент<p>(полученные через свойствоposition) или сообщение об ошибке, если получить данные не удалось (полученное через свойствоerror). - Если элемент не поддерживается, получаем ссылку на резервный элемент
<button>и получаем и выводим те же данные. Однако на этот раз мы используем обработчик событияclickдля кнопки и вызовGeolocation.getCurrentPosition()для получения данных.
const outputElem = document.querySelector("#output");
if (typeof HTMLGeolocationElement === "function") {
const geo = document.querySelector("geolocation");
geo.addEventListener("location", () => {
if (geo.position) {
outputElem.textContent += `(${geo.position.coords.latitude},${geo.position.coords.longitude}), `;
} else if (geo.error) {
outputElem.textContent += `${geo.error.message}, `;
}
});
} else {
const fallback = document.querySelector("#fallback");
fallback.addEventListener("click", () => {
navigator.geolocation.getCurrentPosition(
(position) => {
outputElem.textContent += `(${position.coords.latitude}, ${position.coords.longitude}), `;
},
(error) => {
outputElem.textContent += `${error.message}, `;
},
);
});
}
Результат
Посмотрите, как этот код работает в браузере (исходный код). Также доступна версия этого примера с атрибутом watch у элемента <geolocation>, которая получает данные о местоположении при каждом изменении положения устройства пользователя (см. работающую версию и исходный код).
По возможности попробуйте открыть демонстрационные примеры в браузере с поддержкой этого элемента и в браузере без такой поддержки. Обратите внимание на различия в последовательности отображения диалоговых окон разрешений при выборе разрешить или запретить доступ к geolocation.
Подробное описание более полного примера, в котором данные о местоположении используются для создания карты вашей местности, см. на справочной странице HTMLGeolocationElement.
Техническая сводка
| Категории содержимого | Потоковое содержимое, фразовое содержимое, интерактивное содержимое, ощутимое содержимое. |
|---|---|
| Допустимое содержимое | Любое подходящее прозрачное резервное содержимое. |
| Пропуск тегов | Не допускается: начальный и конечный теги обязательны. |
| Допустимые родительские элементы | Любой элемент, допускающий фразовое содержимое. |
| Неявная роль ARIA | Нет соответствующей роли |
| Допустимые роли ARIA | button |
| Интерфейс DOM | HTMLGeolocationElement |
Спецификации
| Спецификация |
|---|
| Элемент геолокации HTML> # elementdef-geolocation> |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
geolocation |
144 | 144 | Нет | 128 | Нет | 144 | Нет | 95 | Нет | Нет | Нет | Нет |
autolocate |
144 | 144 | Нет | 128 | Нет | 144 | Нет | 95 | Нет | Нет | Нет | Нет |
watch |
144 | 144 | Нет | 128 | Нет | 144 | Нет | 95 | Нет | Нет | Нет | Нет |
См. также
HTMLGeolocationElementgeolocationПолитика разрешений- API геолокации
- API разрешений
-
Представляем элемент HTML
<geolocation>на developer.chrome.com (2026)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/geolocation