Geo.js нам в помощь
Дата публикации: 25.03.2011
Geo.js — это свободно распространяющаяся Javascript библиотека, которая сглаживает различия между W3C API, Gears API и API мобильных устройств. Достаточно всего лишь подключить пару элементов внизу твоих html страниц (технически их можно подключить, где угодно, даже в <head>. Но это замедлит загрузку страницы, так что лучше этого не делать).
Первый скрипт — gears_init.js инициализирует Gears, если тот установлен. Второй скрипт — geo.js. Подключаем их к странице:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Dive Into HTML 5</title> </head> <body> ... <script src="gears_init.js"></script> <script src="geo.js"></script> </body> </html>
Теперь ты можешь использовать установленные API геолокации:
if (geo_position_js.init()) { geo_position_js.getCurrentPosition(geo_success, geo_error); }
Разберем этот код по шагам. Во-первых, нужно вызвать функцию init(), которая вернет true, если Geoloaction API доступен:
if (geo_position_js.init()) {
Сам по себе вызов функции init() не определит месторасположение пользователя. Это просто проверка возможности вообще определить его положение. Что бы действительно определить положение — нужно вызвать функцию getCurrentPosition():
geo_position_js.getCurrentPosition(geo_success, geo_error);
Функция getCurrentPosition() попросит у браузера разрешение определить местоположение пользователя. Если геолокация поддерживается с помощью Gears, тогда пользователь увидит выплывающее диалоговое окно, в котором браузер спросит разрешения на определение месторасположения пользователя. Если у браузера есть встроенная поддержка геолокации, подобный запрос может выглядеть несколько иначе, как, например, упомянутая мною ранее панель в Firefox 3.5.
Функция getCurrentPosition() принимает в качестве входящих параметров две функции. Если определение месторасположения прошло успешно, тогда вызывается первая функция. В своем примере я дал ей имя geo_success. Например, это может выглядеть так:
geo_position_js.getCurrentPosition(geo_success, geo_error);
Функция geo_success имеет один аргумент, в котором содержится информация о местоположении:
function geo_success(p) { alert("Found you at latitude " + p.coords.latitude + ", longitude " + p.coords.longitude); }
Если getCurrentPosition() не может определить местоположение или пользователь запретил определение, тогда вызовется вторая функция — geo_error:
geo_position_js.getCurrentPosition(geo_success, geo_error);
Функция по обработке ошибок не принимает аргументов:
function geo_error() { alert("Could not find you!"); }
В настоящее время geo.js не поддерживает функцию watchPosition(). Если тебе нужен такой функционал, тогда придется его дописать самостоятельно используя getCurrentPosition().
Куда дальше
- следующая — Итоговый пример
- предыдущая — А что с IE?
- содержание