开发者问题收集

谷歌地图未捕获的类型错误

2013-07-03
10267

自从我开始制作应用程序以来,在Chrome,

115986512

中,一直存在消息,在Chrome和Firefox中,我只是忽略了它。我知道这与我的Google地图有关,因为当我在Chrome中调试更多详细信息时,我可以找到:

006392744

,%7BMain链接转到 https://maps.gstatic.com/ cat_js/intl/en_us/mapfiles/api-3/13/6/%7BMain,ploce%7d.js ,是Google的东西。

,但是昨天我在IE和IE和IE中尝试了我的应用程序它因相同的错误而破裂 - 地图不会加载。知道什么可能是什么问题,我如何解决它?

这是我的功能:

608667745

我这样称呼它:

<代码> 178054104

我看到了一个stackoverflow问题 there 看起来相似的说明,请确保在渲染页面之前加载JavaScript,因此我尝试调用我的功能:

402475145

,但仍会遇到相同的错误。

我称为:

616502222 的Google Maps库
1个回答

我看到的第一个错误是您将 字符串 传递到 new google.maps.LatLng() 。您需要为其提供数字。

不要使用以下代码:

var user_longitude = $("#user-position").attr("data-lng");
var user_latitude = $("#user-position").attr("data-lat");

var currentlatlng = new google.maps.LatLng(user_latitude, user_longitude);

请使用:

var $position = $("#user-position"),
    lat = $position.attr("data-lat"),
    lng = $position.attr("data-lng");

var currentlatlng = new google.maps.LatLng( +lat, +lng );

让我查看其余代码,但这是需要立即修复的一件事。

顺便说一句,作为风格建议,如您所见,我更喜欢像这样在本地化代码中使用较短的名称。由于数据属性为 data-latdata-lng ,而 Maps API 函数称为 LatLng ,因此在这段代码中拼写出 user_latitudeuser_longitude 并没有什么好处。 latlng 是 Maps API 代码中相当标准的术语。

第二个问题是此代码中的 icon 对象无效:

var marker = new google.maps.Marker({
    map: map,
    position: currentlatlng,
    icon: { opacity: 0 }
});

icon 对象需要 url ,并且没有 opacity 选项。如果您删除 icon: { opacity: 0 并修复 lat/lng 问题,则地图将加载而不会出错。

如果您想要一个没有图标的标记,一种方法是使用透明的 PNG 文件。您可以将此文件的副本下载到您的服务器:

https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png

然后将此行:

    icon: { opacity: 0 }

更改为:

    icon: 'path/to/1x1.png'

此代码中还有一个错误:

  var circle = new google.maps.Circle({
    map: map,
    fillOpacity: 0,
    strokeWeight: 2,
    strokeOpacity: 0.7,
    radius: 10000,
  });

radius 行末尾的最后一个逗号不应该存在。它只会影响 IE7 等旧版浏览器,但如果删除该逗号,地图在 IE7 中可以正常加载。

此外,关于使用此:

$(document).on("ready", function(){...});

而不是此:

$(function(){...});

这没有任何区别的原因是它们的作用相同!

Michael Geary
2013-07-03