运行了几年的Google Maps API大约一个月前开始出现异常行为。
代码在所有浏览器上的开发机器(localHost)上都可以正常工作。
但是在生产服务器上,当从https域(使用Cloudflare通过nginx反向代理的服务器)调用时,我发现以下行为:
a。在Chrome和Safari上,它仅返回默认的“ initMap”地图,不是找到的结果或标记(图钉)。
b。 Firefox,一切正常。
c。 IE,它仅在刷新页面时有效,而不能在页面之间导航。
在我尝试过的事情中:
基本代码如下(通过freemarker进行部署,因此请忽略那些部分。如上所述,该代码确实有效。
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: {lat: 53.3280182, lng: -6.3743767}
});
var geocoder = new google.maps.Geocoder();
google.maps.event.addDomListener(window, 'load', function() {
geocodeAddress(geocoder, map);
});
}
function geocodeAddress(geocoder, resultsMap) {
var address = "${clientLocation}";
geocoder.geocode({'address': address}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
resultsMap.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: resultsMap,
position: results[0].geometry.location
});
}
});
}
src="https://maps.googleapis.com/maps/api/js?key=xxxx&callback=initMap"
async defer>
编辑: 针对以下评论:
我在测试时确实有以下代码(出于生产目的已将其删除),它未返回任何内容。 (对不起,我应该提到这一点。)
alert(由于以下原因,Geocode失败:'+ status);
我在Java控制台中也一无所获。但是,在下面的有用评论提示下,我将警告级别更改为“详细”,并看到了以下错误。
[Violation]向滚动阻止的“ touchmove”事件添加了非被动事件侦听器。考虑将事件处理程序标记为“被动”,以使页面更具响应性。参见https://www.chromestatus.com/feature/5745543795965952
答案 0 :(得分:0)
根据上述评论,我将Chrome Java控制台中的错误报告更改为“详细”后就发现了问题。
问题出在Cloudflare上的“火箭装载器”上。
我关闭此功能后,问题解决了。