我正在将我的网站从Google Maps V2转换为V3,而且我遇到了一个infoWindow弹出窗口的问题。我有一个GPS跟踪网站,有两个地图页面。一个是“历史”页面,其显示具有来自特定日期的一个车辆的所有标记的静态地图。另一个是“实时”页面,显示多个车辆的最后已知位置。 infoWindow在历史页面上工作,但不在实际页面上。它们共享相同的map.js文件。 我已经将脚本一直跟踪到infoWindow.open,但它不会在实时页面上打开。
一些相关代码:
basemap = mapstraction.getMap().setOptions({
zoomControl: true,
panControl: true,
scrollwheel: true
});
mapstraction.setMapType(mxn.Mapstraction.ROADMAP);
对于实时屏幕上的每个标记:
marker.proprietary_marker.mid = currpositions["livepos"][unit]["id"];
google.maps.event.addListener(marker.proprietary_marker, 'click', googlemarkerclicked);
对于历史记录屏幕上的每个标记:
marker.proprietary_marker.mid = jsondata["data"][markerarr][0];
google.maps.event.addListener(marker.proprietary_marker, 'click', googlemarkerclicked);
function googlemarkerclicked() {
var currmarker = this;
var markerid = this.mid;
//console.log('Marker id: ' + markerid + ' currmarker: ' + currmarker);
//Handle marker click
markerclicked(markerid, currmarker);
}
function markerclicked(markerid, markerele) {
if (pospopup_markerinfo[markerid] == undefined) {
try {
nocache_urladdon = "&nocache=" + new Date().getTime();
geturl = baseurl + "&t=positionpopup&marker=" + markerid + nocache_urladdon;
var loader = new net.ContentLoader(geturl, function() {
eval("var jsondata = " + this.req.responseText);
pospopup_markerinfo[markerid] = jsondata;
//console.log(pospopup_markerinfo[markerid]);
//Open marker info window
openmarkerinfowindow(markerele, markerid);
});
} catch (e) {
alert(e.message + "\nWas trying to add marker info for specified marker " + markerid + ", try clicking refresh");
}
} else {
//Open marker info window
openmarkerinfowindow(markerele, markerid);
}
}
function openmarkerinfowindow(markerele, markerid) {
//Google marker click handling
if (mapstraction.api == "googlev3") {
//markerele.openInfoWindowHtml(genmarkerinfohtml(pospopup_markerinfo[markerid]));
//genmarkerinfohtml(pospopup_markerinfo[markerid])
var baloonpos = new google.maps.LatLng(pospopup_markerinfo[markerid]["lat"], pospopup_markerinfo[markerid]["lon"]);
infoWindow = new google.maps.InfoWindow({
pixelOffset: new google.maps.Size(0, -20),
content: genmarkerinfohtml(pospopup_markerinfo[markerid]),
position: baloonpos
});
//console.log(pospopup_markerinfo[markerid]["lat"] + "," + pospopup_markerinfo[markerid]["lon"]);
infoWindow.open(basemap);
}
基于研究,我尝试将infoWindow创建移入和移出标记生成功能(我一次只需要打开一个infoWindow),同时始终唯一地生成内容。我也试过使用和不使用markerele.infoWindow,这没有任何区别。我已经测试过正确生成了内容和位置变量。令我感到困惑的是,无论我在哪里设置infoWindow,它都会在一个页面上打开,但在共享代码时,它在其他页面上根本不会打开。
感谢任何帮助。
答案 0 :(得分:0)
经过多个小时的燃烧后,解决方案很简单。 在调用infoWindow.open时,我需要指定标记。
infoWindow.open(底图,markerele);
我不知道为什么它在一个页面上工作而在另一个页面上工作。 所以现在我已经将infoWindow创建移回到标记创建代码之外,因此只创建了一个窗口。这意味着当我点击不同的标记时,信息窗口会移动"而不是打开倍数。
所以现在代码看起来更像是这样:
function initgeneral() {
// Loaded once per page load
infoWindow = new google.maps.InfoWindow({
//pixelOffset: new google.maps.Size(0, -10),
//content: genmarkerinfohtml(pospopup_markerinfo[markerid]),
//position: baloonpos
});
}
在" onclick"函数,现在我们所做的就是设置内容并打开窗口,现在包括markerid。
infoWindow.setContent(genmarkerinfohtml(pospopup_markerinfo[markerid]));
infoWindow.open(basemap,markerele);