我试图使用下面的代码使用谷歌MAP API v3。

<h2>Topology</h2>

<script src="https://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>

<link rel="stylesheet" type="text/css" href="{% url css_media 'tooltip.topology.css' %}" />
<link rel="stylesheet" type="text/css" href="{% url css_media 'tooltip.css' %}" />

<style type="text/css" >
      #map_canvas {
              width:300px;
            height:300px;
     }
</style>

<script type="text/javascript">

var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
            myOptions);

</script>

<div id="map_canvas"> </div>

当我运行这段代码时,浏览器会这样说。

无法读取属性“offsetWidth”为空

我不知道,因为我遵循本教程中给出的方向。

你有什么线索吗?


当前回答

确保在第一次加载API时包含了Places库&libraries= Places参数。

例如:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">

其他回答

改变ID(在所有3个地方)从“map-canvas”到“map”为我修复了它,即使我已经确保ID是相同的,div有宽度和高度,代码直到窗口加载调用后才运行。不是破折号;除了“map”,它似乎不能与任何其他ID一起工作。

这个问题通常是由于地图div在需要访问它的javascript运行之前没有被渲染。

您应该将初始化代码放在onload函数内或HTML文件的底部,就在标记之前,这样DOM在执行之前就会完全呈现(注意,第二个选项对无效HTML更敏感)。

注意,正如matthewsheets指出的那样,这也可能是由于div的id在你的HTML中根本不存在(div不被渲染的病态情况)

从wf9a5m75的帖子中添加代码样本,将所有内容放在一个地方:

<script type="text/javascript">

function initialize() {
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
        zoom: 8,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
            myOptions);
}
google.maps.event.addDomListener(window, "load", initialize);

</script>

如果你没有在地图选项中指定居中或缩放,你也会得到这个错误。

如果你碰巧使用asp.net Webforms,并且正在使用母版页在页面后面的代码中注册脚本,不要忘记使用map元素(vb.net)的clientID:

ClientScript.RegisterStartupScript(Me.[GetType](), "Google Maps Initialization", String.Format("init_map(""" & map_canvas.ClientID() & """...

在HTML中设置ng-init=init() 在控制器中 使用美元的范围。Init = function(){…} 而不是google。maps。event。addDomListener(window, "load", init){…}

希望这对你有所帮助。