Я работаю над приложением, которое использует стандартный API геолокации W3C, но я не могу заставить его работать в Safari на моем ПК с Windows 7 и XP. Он отлично работает на моем iPad и iPhone. Он также отлично работает на Chrome (5, 6, 7 и сборке Canary) и на Firefox (3.6). У меня нет Mac, поэтому я не могу проверить его на этом. IE пока не поддерживает геолокацию, так что это тоже покрыто.
Я создал урезанную версию и размещаю ее на Google Apps Engine, чтобы вы могли взглянуть на код: http://html5 -geolocator.appspot.com / . Весь (упрощенный) javascript находится в html, поэтому вы должны иметь возможность щелкать правой кнопкой мыши и отлаживать / просматривать исходный код.
Это довольно прямое преобразование примеров в Google Map API DevGuide . Интересно, что примеры, которые размещает Google, также НЕ РАБОТАЮТ в Safari 5.0.x на Windows 7 (но они отлично работают на всех этих других платформах, так же как и мое приложение), например, http://code.google.com/apis/maps/documentation/javascript/examples/map-geolocation.html показывает то же самое как приложение, карта не отображается, веб-страница остается серой.
Через некоторую отладку (alert («Я здесь») :-) кажется, что в Safari он выполняет navigator.geolocation.getCurrentPosition (myCallback), но, кажется, он никогда не достигает myCallback ... как будто он никогда возвращается из getCurrentPosition. Я также видел, что если я оставляю окно браузера открытым на ночь, когда я возвращаюсь к нему утром, появляется предупреждение и карта (хотя и не всегда). Я также попытался добавить errorCallback navigator.geolocation.getCurrentPosition (myCallback, errorCallback), но он также никогда не выполняет это, снова предлагая никогда не возвращаться из вызова getCurrentPosition.
Почему это происходит?
EDIT:
Только что провёл ещё какое-то тестирование, я добавил опцию тайм-аута (navigator.geolocation.getCurrentPosition (myCallback, errorCallback, {timeout: 5000});), и, действительно, время ожидания истекло, независимо от того, насколько высоко я его установил. никогда не возвращается из службы геолокации Google, но почему?