2012-02-02 7 views
1

Я должен делать что-то неправильно здесь, но я не могу найти, что ... Я делаю страницу для своего веб-сайта, которая, среди прочего, предоставляет инструкции для рабочих мест на основе текущего местоположения пользователя. Чтобы получить их местоположение, я использую Geolocation API, реализованный в Firefox (я тестировал FF9 и теперь FF10). На данный момент я тестирую с примером кода, который в Wikipedia article:API геолокации не работает, и Google Maps «Мое местоположение»

<html> 
<head> 
<title>Geolocation Test</title> 
<script type='text/javascript'> 
var gl; 

function displayPosition(position) { 
    var p = document.getElementById("p"); 
    p.innerHTML = "<table border='1'><tr><th>Timestamp</th><td>" + position.timestamp + 
    "<tr><th>Latitude (WGS84)</th><td>" + position.coords.latitude + " deg</td></tr>" + 
    "<tr><th>Longitude (WGS84)</th><td>" + position.coords.longitude + " deg</td></tr></table>"; 
} 

function displayError(positionError) { 
    alert("error " + positionError.code); 
} 

try { 
    if (typeof navigator.geolocation === 'undefined'){ 
    gl = google.gears.factory.create('beta.geolocation'); 
    } else { 
    gl = navigator.geolocation; 
    } 
} catch(e) {} 

if (gl) { 
    gl.getCurrentPosition(displayPosition, displayError); 
} else { 
    alert("Geolocation services are not supported by your web browser."); 
} 
</script> 

<body> 
<p id='p'></p> 
</body> 
</html> 

(копировать/вставить эту информацию в текстовом редакторе, сохранить как «whatever.html» и перетащите файл в браузере откройте его)

Очень простой код, и он действительно работал нормально в прошлый четверг, 26.01.12. (Я знаю, я знаю, люди говорят: «Это сработало вчера!», Когда они действительно что-то придумали, но я клянусь, что это действительно так.) С тех пор, однако, это дало мне код ошибки 2 «POSITION_UNAVAILABLE». Я попробовал это с моим рабочим компьютером в своей рабочей сети, моей работе и домашних компьютерах на моем домашнем интернет-соединении, а также на моем рабочем компьютере в точке доступа Wi-Fi с моего телефона, и каждый раз он дает код ошибки 2.

Я думал, может быть, я как-то goofed что-то в моем браузере или мои настройки сети или что-то (хотя я не мог себе представить, что), поэтому я попытался следующий тест, который каждый человек должен быть в состоянии сделать:

  1. Перейдите на maps.google.com.
  2. Искать «сиэтл» (или какое-то другое место, что угодно).
  3. Нажмите кнопку «Направить маршрут».
  4. В указателях слева «A» следует сказать «Мое местоположение» и «B» следует сказать «сиэтл». (Если он не говорит «Мое местоположение» в A, введите «m» в поле, а раскрывающееся меню с автоматическим заполнением обычно будет иметь «Мое местоположение» в качестве первого варианта.)
  5. Нажмите «ПОЛУЧИТЬ НАПРАВЛЕНИЯ», кнопка.
  6. В Firefox должно появиться сообщение о том, что maps.google.com хочет знать ваше местоположение. Нажмите «Поделиться местоположением».
  7. Через пару секунд он должен либо показать вам маршруты откуда-нибудь (где бы он ни думал, ваш сервер), в Сиэтле, либо поле «А» должно исчезнуть, и оно скажет «Не удалось найти ваше местоположение» или аналогичное к верхней части карты.

И вот что странно: я еще не получил этого, чтобы работать на любом компьютере. Мой рабочий компьютер (как на FF10, так и на Chrome), компьютеры моих коллег, мой домашний компьютер и рабочий компьютер GF все делают то же самое; ни один не может найти местоположение.

Так что мой вопрос: Является ли API-интерфейс местоположения или что-то в этом роде, или я что-то прикручиваю? Я не смог найти какие-либо указания в Интернете об отключении API, и кажется, что отключение очень маловероятно, но если да, то почему он не работает на любом компьютере, на котором я его пробовал? Может ли кто-нибудь еще дублировать эти данные или знать, что я делаю неправильно?

Спасибо!

ответ

1

Ваш скрипт работает отлично, а функция место в Google Maps, а также (FF9.0.1)

Где ты? (Я имею в виду физически). Возможно, если вы находитесь в каком-то отдаленном месте, Google еще не может вычислить ваше местоположение! Попробуйте в каком-нибудь крупном городе, возможно ...

Другая возможность: у вас нет доступа к серверам местоположения Google, как если бы ваш интернет-провайдер заблокировал его ...

+0

Да, API запущен. Поскольку вы пробовали компьютеры, принадлежащие нескольким людям, я также исключаю, что вы запретили делиться своим местоположением своим браузером. Звучит более правдоподобно, что ваш просмотр пытается, но терпит неудачу, потому что на его пути что-то идет. – miguev

+0

Я в Портленде, штат Орегон. Надеюсь, Google знает, где это. :) И я видел, как один ISP блокировал его, но я пробовал из того, что должно быть как минимум четыре отдельных провайдера: мой рабочий доступ в Интернет, который фактически через интрасеть, которая подключается к внешнему миру где-то на восточном побережье, а затем мой домашний интернет-провайдер, мой Wi-Fi-телефон моего телефона Android и мое рабочее соединение GF. Появляется окно с вопросом, хочу ли я каждый раз делиться местоположением, чтобы часть работала нормально, но затем он возвращает код ошибки 2 с моим тестовым кодом и не может найти «Мое местоположение» на Картах Google. – Sam

0

Ваш скрипт работает в Chrome, но не в FF. Ошибка, которую я получаю в FF, недоступна положению, что означает, вероятно, что служба определения местоположения FF не имеет доступа к моей сети Wi-Fi. Я предполагаю, что ошибка, которую вы получаете, - это ошибка 2 в вашем предупреждении?

Если вы используете Firebug, вы можете установить точку остановки в строке 15. Когда она остановится, нажмите на позициюError на панели Watch справа и проверьте, что это за код. Mine читает: код 2, который переводится как Unavailable.

Я предлагаю вам иметь другой код для обработки этого экземпляра.

+0

Код positionError.code выгружается в поле предупреждения JS; это код 2 каждый раз. Насколько я могу судить, API-интерфейс Geolocation должен работать до тех пор, пока у вас есть какой-либо доступ в Интернет, и на самом деле он должен быть более точным на Wi-Fi во многих случаях, поскольку Google сопоставил местоположение кучи горячих точек Wi-Fi. Но именно поэтому я пробовал несколько компьютеров и типы подключения. В моем производственном коде в интранете компании у меня есть код для обработки неспособности найти местоположение (он выбирает значение по умолчанию), но не обнаружение местоположения делает его гораздо менее полезным. – Sam

+0

Ну, 3 балла: 1) Google, возможно, не отображал все ваши внутренние Wi-Fi-сети, может и не знать, где они находятся. 2) Не знаете, почему FF не получает местоположение, когда делает Chrome, он должен использовать тот же провайдер местоположения. Вы получаете одинаковые результаты независимо от браузера? 3) Является ли это внутренним единственным сайтом? Если это так, вам может потребоваться перейти на Карт API для бизнеса, корпоративную версию Google. –

+0

Я думал, что API геолокации должен по крайней мере получить местоположение вашего интернет-провайдера по вашему IP-адресу, если он не знает, где находится точка Wi-Fi. В любом случае, как отмечалось в моем сообщении, Chrome не получает местоположение на Картах Google. И с помощью простого тестового кода HTML он даже не выводит сообщение, чтобы спросить, хочу ли я поделиться этим местом, даже после установки опции «Разрешить всем сайтам отслеживать мое физическое местоположение». В тестовом коде код ошибки 1, «PERMISSION_DENIED». – Sam