Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查Google Maps API是否已加载?_Javascript_Google Maps Api 3 - Fatal编程技术网

Javascript 如何检查Google Maps API是否已加载?

Javascript 如何检查Google Maps API是否已加载?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,如何检查谷歌地图API(v3)是否已加载 P>我不想执行API脚本,如果API没有因为Internet连接问题而被加载(网页是本地托管的)。 它将加载您指定的javascript文件,然后执行回调,在optionalSettings参数中指定。我相信您可以使用if(google&&google.maps){…},除非您指的是中的内容,它是关于maps API V2的,但有人将其更新为v3 if(google.maps){…}如果google未定义(即API未加载),则会给您一个引用错误 相反,

如何检查谷歌地图API(v3)是否已加载


<> P>我不想执行API脚本,如果API没有因为Internet连接问题而被加载(网页是本地托管的)。
它将加载您指定的javascript文件,然后执行回调,在
optionalSettings
参数中指定。

我相信您可以使用
if(google&&google.maps){…}
,除非您指的是中的内容,它是关于maps API V2的,但有人将其更新为v3

if(google.maps){…}
如果google未定义(即API未加载),则会给您一个引用错误

相反,使用
if(typeof google=='object'&&typeof google.maps=='object'){…}
检查它是否成功加载。

编辑: 如果您不怕“不明确”,那么您可以使用以下命令,否则,如果您不确定是否只有一个
google
变量实例,那么请使用DaveS answer

检查google maps v3 api是否已加载:

if(google && google.maps){
    console.log('Google maps loaded');
}
在这种情况下,变量
google
将使用javascript-truth,因此如果它是函数、对象或字符串,它将变为true,然后将尝试访问该对象内部的
映射

与之相反:

if(!google || !google.maps){
    console.log('Not loaded yet');
}

在异步加载中,这一点对我很有用(感谢DaveS):

一个简单的
if(google&&google.maps)
检查对我不起作用;当我尝试访问API时,仍然会出现错误:

TypeError:google.maps.LatLng不是构造函数

在我的例子中,这可能是因为我的鼠标事件处理程序在MapsAPI完成下载之前被触发。在本例中,为了可靠地检查是否加载了映射,我创建了一个“gmaps”别名,并在dom ready上初始化它(使用JQuery):

然后在我的事件处理程序中,我可以简单地使用:

if(gmaps) {
    // do stuff with maps
}
试试看

(google && 'maps' in google)?true:false

if(google && 'maps' in google){
    //true
}
else{
    //false
}
由于我在手机上遇到了以下问题:

if (typeof google === 'object' && typeof google.maps === 'object') {...}

目前没有一个答案对我来说是100%一致的(不包括Google Loader,我还没有尝试过)。我认为检查
google.maps
的存在不足以确保库已经完成加载。以下是我在请求Maps API和可选位置库时看到的网络请求:

第一个脚本定义了
google.maps
,但是您可能需要的代码(
google.maps.Map
google.maps.places
)在其他一些脚本加载后才会出现

在加载Maps API时,定义回调更安全@verti的答案几乎是正确的,但仍然依赖于不安全地检查
google.maps

相反,请执行以下操作:

HTML:


如果您使用的是
jQuery
,我有个好消息要告诉您:

if (typeof google === 'object' && typeof google.maps === 'object') {
     gmapInit();
} else {
     $.getScript('https://maps.googleapis.com/maps/api/js?key='+gApiKey+'&language=en', function(){
         gmapInit();
     });
 }

这与

很相似,正如你所知,有一个问题与公认的答案有关。 如果脚本已加载,则返回true,否则“typeof google”可能返回undefined并抛出错误。解决办法是:

if('google'在窗口中&&typeof google=='object'&&typeof google.maps=='object'){…}


这可以确保始终返回布尔值。

谢谢,这就是我一直在寻找的。我处于一个名称空间环境中,因此简单地引用
谷歌
对我不起作用,我不得不使用
window.google
。我相信有一些情况是
google.maps
可能是在mapsapi完全加载完毕之前定义的,这会导致不一致的中断。如果其他人有同样的问题,可能想尝试我下面的答案,使用回调。它给我错误谷歌是未定义的。为什么?Daniela,你用什么代码来检查google是否被定义了?我建议的操作员类型不应给出“google未定义”错误。谢谢,但这并不能解决我的问题,因为加载程序脚本本身必须从internet加载。如果连接失败,
google.load
将抛出一个引用错误。尽管如此,感谢您的回复。根据该页面,谷歌地图API不是可用API的一部分。答案可追溯到2012年2月。从那时起,加载程序API可能已更改。如果(Google.maps){…}
在未加载API时向我抛出错误,则上面的Google加载程序链接现在已完全消失。戴维在他的回答中提到了这个问题。谢谢这是一个比我现在更好的答案,如果你不必支持旧版本的IE(
if(google && 'maps' in google){
    //true
}
else{
    //false
}
if (typeof google === 'object' && typeof google.maps === 'object') {...}
<!-- "async" and "defer" are optional, but help the page load faster. -->
<script async defer
  src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=mapsCallback">
</script>
var isMapsApiLoaded = false;
window.mapsCallback = function () {
  isMapsApiLoaded = true;
  // initialize map, etc.
};
if (typeof google === 'object' && typeof google.maps === 'object') {
     gmapInit();
} else {
     $.getScript('https://maps.googleapis.com/maps/api/js?key='+gApiKey+'&language=en', function(){
         gmapInit();
     });
 }