2

次のコードを使用して、IE9でGoogleMapsAPIスクリプトを非同期で読み込んでいます。

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!"

誰かがこれを行う方法を教えてもらえますか?

前もって感謝します...

4

2 に答える 2

1

アンドリューが述べたように、これを処理する直接的な方法はありません。ただし、少なくとも可能性を説明することはできます。

妥当な時間枠(5秒?)のタイムアウトを設定します。タイムアウトコールバック関数で、googleやgoogle.mapsの存在をテストします。存在しない場合は、スクリプトのロードが失敗したと想定してください。

setTimeout(function() {
  if(!window.google || !window.google.maps) {
    //handle script not loaded
  }
}), 5000);
// Maps api asynchronous load code here.
于 2013-02-04T14:48:36.227 に答える
0

私はついにこの問題の解決策を見つけました。callback()Chadは素晴らしい解決策を提供しましたが、唯一のことは、スクリプトがロードに失敗した場合に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;

これは私にとってはうまくいくようです!:)

于 2013-02-04T17:18:39.413 に答える