API геолокации в Safari 8 и 7.1 продолжает запрашивать разрешение
Я построил API геолокации в своем webapp, и все браузеры работают нормально. Кроме Safari 8 и 7.1. Браузер продолжает запрашивать разрешение после разрешения или не позволяет его и заканчивается в бесконечном цикле, делая браузер (вкладку) непригодным для использования. Это легко воспроизводимо, просто перейдя к http://html5demos.com/geo в Safari.
есть ли какое-либо исправление для этого или это просто ошибка в Safari? Я искал но ничего не нашел связанный.
3 ответов
наша команда тоже это видела. Сначала мы думали, что застряли в каком-то цикле, который игнорировали другие браузеры, поэтому мы инструментировали код и подтвердили, что вызов происходит только один раз. Мы приостановили JavaScript, заставив точку останова, и предупреждения продолжали приходить (и приходить, и приходить...). В этот момент мы были уверены, что проблема не в нашем коде.
по прихоти я разместил вызов API геолокации внутри setTimeout
(чтобы стек вызовов to empty) и проблема ушла. Не знаю, почему это решит проблему. . .
редактировать
на запрос я выставляю пример @ https://jsfiddle.net/r8hst2zp/1/
Я не думаю, что это ошибка в safari, вы можете попробовать следующий пример, он отлично работал для меня:
Ok. Итак, из двух ответов от @MeMTn и @chris-camaratta, вот несколько мыслей:
1)
по прихоти я поместил вызов API геолокации внутри setTimeout (чтобы позволить стеку вызовов опустеть), и проблема ушла. Не знаю, почему это решит проблему. . .
Я сделал то же самое в моем приложении angularjs, и он работает. Прекрасно!
2)
Я не думаю, что это ошибка в safari, вы можете попробуйте следующий пример, он отлично работал для меня:http://www.w3schools.com/html/html5_geolocation.asp
Как это работает (в Safari!) без функции setTimeout?
в моем приложении angularjs вызов геолокации является одним из первых, что происходит при загрузке страницы. Я считаю, что это относится почти ко всем другим приложениям/веб-страницам. В Примере W3 есть кликабельная кнопка, которая запускает вызов геолокации, когда пользователь щелкает его (что происходит, когда страница загружена).
установив тайм-аут, мы разрешаем Safari заниматься некоторыми другими вещами (которые могут иметь какое-то отношение к вызову API геолокации для всех, кого я знаю) в течение нескольких (миллионных)секунд.
Если я установил тайм-аут в
ошибка или нет, это явно что-то с сафари.