Marker的setPosition方法失效,信息窗却正常移动问题求助
问题诊断与修复方案
嘿,我一眼就瞅到问题所在了——你代码里用了JavaScript的保留关键字new当变量名,这就是marker没动的罪魁祸首!
先看你这段代码:
var new = new google.maps.LatLng(lat, lng); marker.setPosition(new); infowindow.setPosition(marker.getPosition());
为什么会出现这种诡异的现象?
- JavaScript里的
new是核心保留关键字(用来创建对象实例的那个),理论上绝对不能用作变量名。但有些浏览器/旧版SDK可能出于兼容性考虑,对这种不规范写法睁一只眼闭一只眼,让你之前能侥幸运行。 - 5月11日的Google Maps JS SDK更新大概率收紧了代码规范校验,或者内部逻辑对变量的处理更严格了,直接导致这个“擦边球”写法失效。
- 至于infowindow能正常移动?因为你给它传的是
marker.getPosition()——虽然marker的位置更新没生效,但这里可能是你误打误撞用了某个正确的位置源,或者infowindow的位置逻辑对参数的容错性更强。
快速修复方案
把变量名改成任意非保留关键字的名称就行,比如newLatLng:
var newLatLng = new google.maps.LatLng(lat, lng); marker.setPosition(newLatLng); infowindow.setPosition(marker.getPosition());
为什么10天前正常现在突然出问题?
Google Maps JS SDK的更新经常会优化内部逻辑、修复潜在bug,同时也会对传入的参数做更严格的校验。之前你的代码虽然不规范,但SDK内部还能“容错”,但这次更新后,这种不符合语法规范的写法就触发了隐性错误——而且因为部分JS环境对保留字作为变量名的错误不会抛出明显的控制台报错,才导致你看不到错误信息。
改完变量名后应该就能正常移动marker了,赶紧试试吧!
内容的提问来源于stack exchange,提问作者Robert Mihai Ionas
相关产品推荐
相关产品推荐

