我试图使用下面的代码使用谷歌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”为空

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

你有什么线索吗?


当前回答

在我的案例中,这些问题都是使用defer https://developer.mozilla.org/en/docs/Web/HTML/Element/script解决的

<脚本src=“<你的文件>.js”

不过,您需要考虑浏览器对该选项的支持(我还没有看到问题)

其他回答

我在我的

var map = new google.maps.Map( document.getElementById('map_canvas') );

然后用双引号代替

var map = new google.maps.Map( document.getElementById("map_canvas") );

这招对我很管用。

Year, geocodezip的答案是正确的。 所以像这样修改代码: (如果你还是有麻烦,或者将来可能是别人)

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

在我的案例中,这些问题都是使用defer https://developer.mozilla.org/en/docs/Web/HTML/Element/script解决的

<脚本src=“<你的文件>.js”

不过,您需要考虑浏览器对该选项的支持(我还没有看到问题)

这是对之前删除的帖子的编辑,以包含链接的答案的内容,在答案本身。重新发布这个答案的目的是作为React 0.9+用户的一个PSA,他们也遇到了这个问题。

编辑原文


在使用ReactJS时也得到了这个错误,同时遵循这篇博客文章。萨哈特的评论在这里有所帮助 请看下面sahat的评论内容。

❗️注意React >= 0.9 在v0.9之前,DOM节点是作为最后一个参数传入的。如果您正在使用它,您仍然可以通过调用this. getdomnode()访问DOM节点。 换句话说,在React的最新版本中,用this.getDOMNode()替换rootNode参数。

实际上最简单的方法来解决这个问题,只是移动你的对象之前Javascript代码,它对我有用。我猜在你的答案对象是加载后javascript代码。

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

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

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