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.