过去5或6周,我一直在开发JS widget
。这个想法是,它可以通过简单地将href添加到远程.js文件以及具有给定ID的DIV容器来添加到任何站点,以包含窗口小部件的内容。
小部件广泛使用Google Map API,我将其引用如下:
https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,places&callback=initializeGoogleMaps
当加载小部件时,它将要求用户检查其位置的权限,然后执行该位置的简单地理编码,以便在地图上绘制标记。
一切都运作良好,我必须在开发过程中测试超过2,000次搜索。
我昨天部署了小部件并成功将其嵌入到主机网站中 - 一切都像往常一样完美。然而,今天早上,我的小部件正在通过 Chrome的控制台报告:
而失败Uncaught RangeError: Maximum call stack size exceeded{main,geometry,places}.js:27 (anonymous function)VM530:33 cVM530:33 TT.(anonymous function).fitBounds{main,geometry,places}.js:48 (anonymous function){main,geometry,places}.js:26 Uf{main,geometry,places}.js:48 O.fitBoundsWRAPPostcodeLocator.js:1541 setupPageWRAPPostcodeLocator.js:964 jQuery.ajax.successjquery.js?time=95944:3 jjquery.js?time=95944:3 k.fireWithjquery.js?time=95944:12 xjquery.js?time=95944:12 b.onload.b.onreadystatechange
由于小部件上次运行,我的代码或主机没有任何更改,因此我怀疑Google API存在问题。
可以在以下位置看到嵌入到虚拟主机中的我的窗口小部件的示例:
http://pcl.solsticecloud.co.uk
花了几个小时试图找到底线,我仍然不是更聪明。
非常感谢任何帮助或建议。
提前谢谢你,
马特
答案 0 :(得分:5)
感谢Matt Alexander这正是问题和解决方案,但似乎Google更改了位置属性的名称,而不是 .k 和 .D ,现在是 .A 和 .F !,请查看以下控制台日志:
答案 1 :(得分:2)
现在它是'.G'和'.K'。如上所述 - 最好使用'.lat()'和'.lng()'。
答案 2 :(得分:1)
您也可以使用
keys = Object.keys(LatLng);
geometry.location[keys[0]]; // Obtain value for latitude
答案 3 :(得分:0)
我找到了此问题的原因并进行了修复。
我使用以下代码:
address = document.getElementById("strSearch").value;
geocoder.geocode({ 'address': address, componentRestrictions: { country: 'GB' } }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
toggleModal();
deleteMarkers();
deleteBanks();
searchSourceLatLng = new google.maps.LatLng(results[0].geometry.location.k, results[0].geometry.location.B);
setSearchPointPostcode(results, buildResults);
}
else {
callback();
}
})
导致此问题的特定行是:
searchSourceLatLng = new google.maps.LatLng(results[0].geometry.location.k, results[0].geometry.location.B);
" .B"已经工作了几个星期,但现在它似乎不再是一个有效的财产。相反," .D"工作,所以我的代码现在有效。
由于该属性不再有效,我有一个零值的LatLng对象,当我试图查看我的地图边界时,这导致地图崩溃。
我很想知道API的变化方式或原因。
另外,一个愚蠢的问题我确定,但为什么" .k"和" .D"?什么" .Lng"和" .Lat"?
很高兴它排序了,只是希望API不会再次发生变化。
答案 4 :(得分:0)
您可以遍历location
的属性并获取坐标而无需直接访问其属性:
geocoder.geocode({ 'address': value.address }, function (results, status) {
if (status === google.maps.GeocoderStatus.OK && results.length > 0) {
var coords = [];
for (var key in results[0].geometry.location) {
coords.push(results[0].geometry.location[key]);
}
return {
'latitude': coords[0],
'longitude': coords[1]
};
}
});
答案 5 :(得分:0)
尝试这个希望它会帮助你
allll
答案 6 :(得分:0)
有时此文件有问题: https://www.gstatic.com/charts/loader.js
因此,如果您使用我的,那肯定可以。
代替此:
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
使用这个:
google-chart-loader.js
<script src="~/Content/js/google-chart-loader.js"></script>
https://drive.google.com/open?id=1eOPtgJ9FoZ6917q3OcNPKGe3AT-PXIzg