Javascript 异步谷歌地图API v3未定义不是一个函数
我正在编写一个应用程序,它使用手工构建的框架异步加载谷歌地图。Javascript 异步谷歌地图API v3未定义不是一个函数,javascript,google-maps-api-3,asynchronous,Javascript,Google Maps Api 3,Asynchronous,我正在编写一个应用程序,它使用手工构建的框架异步加载谷歌地图。 当我加载贴图时,由于某种原因,它不会加载所有贴图,最终会出现未捕获类型错误:未定义不是一个函数。我检查了chrome inspector,发现google.maps是一个有效的对象,但它没有自己的属性。我在加载文档之后手动调用“initialize函数”。我做错了什么 无法使用已知URL()异步加载maps API 当您查看脚本文件时,您将看到,加载的不是API,而是加载API的加载程序。加载程序使用document.write()
当我加载贴图时,由于某种原因,它不会加载所有贴图,最终会出现
未捕获类型错误:未定义不是一个函数
。我检查了chrome inspector,发现google.maps
是一个有效的对象,但它没有自己的属性。我在加载文档之后手动调用“initialize函数”。我做错了什么 无法使用已知URL()异步加载maps API
当您查看脚本文件时,您将看到,加载的不是API,而是加载API的加载程序。加载程序使用document.write()
,加载文档后调用时会导致意外结果
此外,文档的onload事件不会等待异步加载的对象,它可能会来得太快
您也不能使用脚本的load事件来调用initialize函数,因为当它启动时,加载程序被加载,而不是maps API
该做什么:将回调参数附加到脚本URL(将初始化函数的名称作为值)
现在,您将获得一个不同的加载程序,它:
document.write()
与注释相关的:似乎回调必须是直接附加到窗口的函数。不酷谷歌:) 还有另一个选项,它支持使用函数引用(而不是函数名) 示例,异步加载maps API,但仅当文档中有ID为
map canvas
的元素时,才加载,然后创建映射:
window.addEventListener('load',function(){
if(document.getElementById('map-canvas')){
加载(“地图”,“3”{
回调:函数(){
新的google.maps.Map(document.getElementById('Map-canvas'){
中心:新google.maps.LatLng(0,0),
缩放:3
});
}
});
}
},假)代码>
body,html,#地图画布{
身高:100%;
保证金:0;
填充:0;
宽度:100%;
}
可能需要一些代码(您的“手工构建框架”将是一个开始)?一个指向显示问题的页面的链接?一个显示问题的JSFIDLE?阅读文档是一个很好的开始,好的,谢谢您提供的信息。我不想使用回调=initialize
,因为我想在initialize函数中传递一些额外的参数,但我想我必须解决它。这正是我想要的for@apneadiving:google API loader将是本例中的一个选项,请参阅我编辑的答案。@Dr.Molle 1 in 5 page loads仍然给出该脚本的错误。google端是否涉及缓存或其他问题?还有另一个很好的解决方案对我有效。它是关于使用google API loader(解释)。