2013-02-04 125 views
2

我使用下面的代码加载谷歌地图API的脚本异步在IE9:谷歌地图API异步加载

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

任何人都可以告诉我如何做到这一点?

在此先感谢...

+1

你确定没有调用'initialize()'吗?如果不是,则无法做任何事情,因为做任何事情都意味着更改您从Google接收的API代码。如果您的配额已超出,您可以尝试将结算功能添加到您的Google控制台。 –

+0

哦...我想如果有一些具体的解决方案来解决这个问题。无论如何,谢谢安德鲁。 – user2004685

+0

我不知道达到配额时究竟发生了什么,但是当您观察加载的脚本的'onerror'事件时,它可能会工作。 –

回答

1

安德鲁提到,没有处理这种直接的方式。但是,至少可以说明这种可能性。

在合理的时间范围内设置超时(5次)。在超时回调函数中,测试google和/或google.maps是否存在。如果它不存在,则假定脚本加载失败。

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

谢谢先生,我认为这会做到这一点! :) – user2004685

+0

我试过这个片段,但它没有工作,如果我们把它放在回调函数中,因为在脚本加载失败时从未调用回调函数! – user2004685

+0

正确 - 这段代码必须是全球性的。 –

0

我终于找到了解决这个问题的办法。乍得给出了一个很好的解决方案,但唯一的是你不能把这段代码放在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; 

这似乎为我工作得很好! :)

+0

仅当您使用google而不是window.google时才会引发错误 – gtournie