API геолокации в Safari 8 и 7.1 продолжает запрашивать разрешение

Я построил API геолокации в моем webapp, и все браузеры работают нормально. Кроме Safari 8 и 7.1. Браузер продолжает запрашивать разрешение после разрешения или отсутствия разрешения и заканчивается бесконечным циклом, делая браузер (вкладку) непригодным для использования. Он легко воспроизводится, просто перейдя в http://html5demos.com/geo в Safari.

Есть ли какое-либо исправление для этого или это просто ошибка в Safari? Я искал, но не мог найти ничего связанного.

enter image description here

Ответы

Ответ 1

Наша команда тоже это заметила. Сначала мы думали, что, возможно, застряли внутри какой-то петли, которую игнорировали другие браузеры, поэтому мы измерили код и подтвердили, что вызов происходит только один раз. Мы приостановили JavaScript, заставив точку останова, и предупреждения продолжали (и приближались, и приближались...). На этом этапе мы были уверены, что проблема не в нашем коде.

По прихоти я поместил вызов в GeoLocation API внутри setTimeout (чтобы позволить стеку вызовов пуст), и проблема исчезла. Не знаю, почему это исправит проблему.,.

Edit

По запросу я привел пример @https://jsfiddle.net/r8hst2zp/1/

Ответ 2

Я не думаю, что это ошибка в сафари, вы можете попробовать следующий пример, он работал отлично для меня:

http://www.w3schools.com/html/html5_geolocation.asp

Ответ 3

Ok. Итак, из двух ответов от @MeMTn и @chris-camaratta, вот несколько мыслей:

1)

По прихоти я поместил вызов в GeoLocation API внутри setTimeout (чтобы позволить стеку вызовов пустым), и проблема исчезла. Не знаю, почему это исправит проблему.,.

Я сделал то же самое в своем приложении angularjs, и он работает. Отлично!

2)

Я не думаю, что это ошибка в сафари, вы можете попробовать следующий пример: он работал отлично для меня: http://www.w3schools.com/html/html5_geolocation.asp

Как это работает (в Safari!) без setTimeout?

В моем приложении angularjs вызов GeoLocation является одной из первых вещей, которые происходят при загрузке страницы. Я считаю, что это касается практически всех других приложений/веб-страниц. В примере W3 есть кнопка clickable, которая вызывает вызов в GeoLocation, когда пользователь нажимает на нее (что происходит при загрузке страницы).

Установив тайм-аут, мы разрешаем Safari иметь дело с некоторыми другими вещами (которые могут иметь какое-то отношение к вызову API GeoLocation для всех, что я знаю) за несколько миллисекунд.

Если я установил таймаут в < 10 ошибка возвращается, даже на localhost. Я думаю, что я буду придерживаться 100 мс. Но это очень несправедливо для других, работающих браузеров.

Ошибка или нет, что-то с Safari.