Асинхронная загрузка API Карт Google

Я загружаю скрипт API Карт Google Асинхронно в IE9, используя следующий код:

function initialize() {
  ...
}

function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize";
  document.body.appendChild(script);
}

window.onload = loadScript;

Теперь дело в том, что когда скрипт полностью загружен, initialize() функция вызывается автоматически. Но когда иногда квота пользователя была превышена initialize() функция не вызывается и вместо карты мы видим простой белый экран.

Я хочу обнаружить это и запустить мою пользовательскую функцию, которая отображает некоторые предупреждения, такие как: "Error!",

Может кто-нибудь сказать мне, как это сделать?

Заранее спасибо...

2 ответа

Решение

Как упоминал Эндрю, прямого способа справиться с этим не существует. Тем не менее, вы можете по крайней мере учитывать возможность.

Установите тайм-аут для разумного периода времени (5 секунд?). В функции обратного вызова тайм-аута проверьте наличие google и / или google.maps. Если он не существует, предположим, что загрузка скрипта не удалась.

setTimeout(function() {
  if(!window.google || !window.google.maps) {
    //handle script not loaded
  }
}), 5000);
// Maps api asynchronous load code here.

Я наконец нашел решение этой проблемы. Чад дал хорошее решение, но единственное, что вы не можете поместить этот кусок кода в callback() функция, потому что если скрипт не может загрузить callback() функция никогда не вызывается!

Итак, основываясь на том, что упомянул Чад, я наконец-то нашел следующее решение:

function initialize() {
  ...
}

function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize";
  setTimeout(function () {
        try{
            if (!google || !google.maps) {
                //This will Throw the error if 'google' is not defined
            }
        }
        catch (e) {
            //You can write the code for error handling here
            //Something like alert('Ah...Error Occurred!');
        }
    }, 5000);
  document.body.appendChild(script);
}

window.onload = loadScript;

Это, кажется, работает хорошо для меня!:)

Другие вопросы по тегам