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后调用回调函数(初始化)
  • 演示:


    与注释相关的:似乎回调必须是直接附加到窗口的函数。不酷谷歌:)

    还有另一个选项,它支持使用函数引用(而不是函数名)

    示例,异步加载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(解释)。