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

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

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

enter image description here

3 ответов


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

по прихоти я разместил вызов API геолокации внутри setTimeout (чтобы стек вызовов to empty) и проблема ушла. Не знаю, почему это решит проблему. . .

редактировать

на запрос я выставляю пример @ https://jsfiddle.net/r8hst2zp/1/


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

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


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

1)

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

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

2)

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

Как это работает (в Safari!) без функции setTimeout?

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

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

Если я установил тайм-аут в

ошибка или нет, это явно что-то с сафари.