Google Maps V3 infoWindow无法在一个页面上打开,但可以在其他方面共享javascript

时间:2017-05-10 13:31:37

标签: javascript google-maps

我正在将我的网站从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,它都会在一个页面上打开,但在共享代码时,它在其他页面上根本不会打开。

感谢任何帮助。

1 个答案:

答案 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);