Как уловить неверный ключ API для Google Maps
У меня есть этот код:
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=babab" type='text/javascript'></script>
Если ключ недействителен, он выдает предупреждение, но в этом случае я хочу выполнить некоторые действия. Я не уверен, как это сделать. Любые идеи?
Ответы
Ответ 1
Google не предлагает внешний метод проверки ключа API Карт Google. Следовательно, вы не можете запрашивать какую-либо услугу, например. "Этот код действителен abcde1234
" и получает ответ TRUE
/FALSE
.
Существует обсуждение того, как генерируется ключ API Карт. Но я предлагаю вам посмотреть сообщение из Майк Уильямс о функции GValidateKey
. Это функция, выполняющая магическую проверку - что она точно делает, например создание хэша из вашей учетной записи/домена Google - мы не знаем.
Я вижу два решения для вашей проблемы проверки правильности предоставленного ключа API:
- Перезаписать входящее оповещение с помощью какого-либо специального кода (проверьте наличие содержимого предупреждения или проверьте, появилось ли предупреждение с X секундами после загрузки страницы)
- Как-то получить функцию
GValidateKey
для проверки вашего ключа заранее. Может быть, вы можете позвонить ему, прежде чем ссылаться на API Javascript? Звучит для меня хакерским...
Проблема, которую вы, вероятно, будете иметь, заключается в том, что вы не знаете, что Google действительно проверяет. Реферер, ссылающийся сайт, хост - множество возможностей (это не IP-адрес сервера, но имя плюс дополнительная информация).
Ответ 2
Я просто столкнулся с необходимостью выполнить действие, если был использован недопустимый ключ API. Документация Google состояния:
Если вы хотите программно обнаружить отказ аутентификации (например, для автоматической отправки маяка), вы можете подготовить функцию обратного вызова. Если определена глобальная функция, она вызывается, когда аутентификация завершается неудачно.
Это все, что мне нужно было сделать:
function gm_authFailure() { // Perform action(s) }
Ответ 3
Для современных браузеров (IE9 + и других) вы можете использовать событие DOMNodeRemoved. Вам просто нужно добавить обработчик событий к элементу, который вы передаете конструктору карты:
var map = new google.maps.Map(element, myOptions);
element.addEventListener("DOMNodeRemoved", function(e){
if (e.target === element){
//your code here
element.removeEventListener("DOMNodeRemoved", mapWasRemovedHandler, true);
}
}, false);