Мое веб-приложение загружает Карты Google JS API v3 в заголовок html следующим образом:
<head>
<script src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&libraries=places"></script>
</head>
Все работает нормально, за исключением ~ 1 из 100 просмотров страниц на мобильных устройствах, Карты Google сделают обратный вызов к глобальному gm_authFailure
, который, согласно Google, происходит, когда «аутентификация не проходит» https://developers.google.com/maps/documentation/javascript/events#auth -errors
Для отладки я записываю весь консольный журнал из загрузки документа, и в моей глобальной функции gm_authFailure
:
Я печатаю журнал, который перед вызовом gm_authFailure
всегда показывает нижеприведенное, что, согласно документам, происходит, когда Google определяет, что библиотека карт не была загружена из https://maps.googleapis.com/maps/api/js:
Google Maps JavaScript API error: NotLoadingAPIFromGoogleMapsError
https://developers.google.com/maps/documentation/javascript/error-messages#not-loading-api-from-google-maps-error
Я также собираю стек вызовов, который вызвал gm_authFailure
, используя new Error().stack
, который выводит ниже, который предлагает a. библиотека Карт загружается с maps.googleapis.com, и b. ошибка возникает при аутентификации библиотеки, а не при вызове библиотеки для ее использования.
at gm_authFailure (https://EXAMPLE.COM/MY_PATH:3276:22)
at https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:73:368
at Qp.o (https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:149:177)
at Object.c [as _tj1nu1] (https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:67:84)
at https://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate?1shttps%3A%2F%EXAMPLE.COM%2FMY_PATH&4sMY_API_KEY&callback=_xdc_._tj1nu1&key=MY_API_KEY&token=18280:1:28
Гипотеза:
- У затронутых пользователей есть приложение, расширение браузера или функция сохранения данных сотовой связи, которая блокирует или кэширует библиотеку карт и, таким образом, сбивает с толку библиотеку карт
- Странно, что в
gm_authFailure
callstack инициирующий URL-адрес 'https://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate' мой ключ API указан дважды?
Вещи, которые я знаю:
Когда вызывается gm_authFailure
, библиотека больше не будет работать, например, я ' m не может создать новую карту:
var test_map = new google.maps.Map(document.getElementById("test_google_map"), {"zoom":2})
console.log(test_map.zoom)
не определено, в отличие от 2
- Пользователи, которые вызывают эту ошибку, часто имеют другие записанные загрузки страниц в те же & разные дни, что и загрузить без ошибок.
- Я не могу воспроизвести ошибку, используя то же устройство / браузер и посещая ту же страницу
- Даже если это происходит только в ~ 1% загрузок страниц, это происходит ~ 100 раз / день, так что я уверен, что это не фл уке.