Javascript 谷歌地图标记不会在Firefox上生成信息窗口

Javascript 谷歌地图标记不会在Firefox上生成信息窗口,javascript,google-maps,firefox,Javascript,Google Maps,Firefox,以下内容可以在IE和Chrome上使用,但不能在Firefox上使用(最新版本,27.0.1) 我看到的症状是,点击一个标记有时会正确显示一个信息窗口,有时则不正确-如果不正确,我会看到一个白色的向下三角形出现在地图级别的左上角,街景图标和一个“X”窗口在右侧的同一级别关闭 非常感谢您在调试过程中提供的帮助 我的简化代码如下所示(仍显示错误): 地图测试 xmlhttp=新的XMLHttpRequest(); open(“GET”,“MapTestData.xml”,false); xmlht

以下内容可以在IE和Chrome上使用,但不能在Firefox上使用(最新版本,27.0.1)

我看到的症状是,点击一个标记有时会正确显示一个信息窗口,有时则不正确-如果不正确,我会看到一个白色的向下三角形出现在地图级别的左上角,街景图标和一个“X”窗口在右侧的同一级别关闭

非常感谢您在调试过程中提供的帮助

我的简化代码如下所示(仍显示错误):


地图测试
xmlhttp=新的XMLHttpRequest();
open(“GET”,“MapTestData.xml”,false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var speakers=xmlDoc.getElementsByTagName(“SPEAKER”);
var map=new google.maps.map(document.getElementById('map'){
缩放:10,
中心:新google.maps.LatLng(52.4050,-2),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
变量标记,i,地址,描述,j,iconurl;
var markerBounds=new google.maps.LatLngBounds();
对于(i=0;i这可能是Mozillas垃圾收集中的一个bug。

请尝试以下代码:

google.maps.event.addListener(marker, 'click', (function(marker, i) {

  console.log('create click-function:',
              i,
              speakers[i].nodeName,
              typeof speakers[i].desc);

  var reference=speakers[i];

  return function() {
    if (!marker.open) {
      console.log('run click-function:',
                   i,
                   speakers[i].nodeName,
                   typeof speakers[i].desc);
      //(reference===speakers[i])//<!--note this line, uncomment it later
      infowindow.setContent(speakers[i].desc);
      infowindow.open(map, marker);
      marker.open = true;
    }
    else {
      infowindow.close();
      marker.open = false;
    }
  }
})(marker, i));
它只创建对特定演讲者节点的引用(但当前未使用该节点)

现在取消注释注释注释行:

(reference===speakers[i])
现在将使用对节点的引用(不设置任何内容,仅用于比较)

正如您可能注意到的,现在所有信息窗口都打开了

唯一合理的解释(对我来说)是,现在垃圾收集的行为发生了变化,firefox意识到将使用对节点的引用。但是这样的引用也将在单击回调中使用,而不是通过
扬声器[i].desc


有很多变通/修复方法。我更愿意将infowindow内容存储为标记的属性。

After
xmlDoc=xmlhttp.responseXML
xmlDoc为
null
。读取数据需要一些时间。
xmlDoc
如果行
xmlDoc=xmlhttp.responseXML
更改为
xmlDoc=xmlhttp.responseText,则该行不为空
@Anto Jurković:这是一个同步请求,在javascript控制台中显示此错误:
错误:未捕获异常:[exception…”参数不足[nsimmlhttprequest.send]“nsresult:“0x80570001(NS_error\u XPC\u Not_ough_ARGS)”位置:“JS frame::http://www.geocodezip.com/v3_SO_markersInfowindowsXml.html ::第37行“数据:否]
@Dr.Molle:我忘了写我将代码更改为read response
onreadystatechange
google.maps.event.addListener(marker, 'click', (function(marker, i) {

  console.log('create click-function:',
              i,
              speakers[i].nodeName,
              typeof speakers[i].desc);

  var reference=speakers[i];

  return function() {
    if (!marker.open) {
      console.log('run click-function:',
                   i,
                   speakers[i].nodeName,
                   typeof speakers[i].desc);
      //(reference===speakers[i])//<!--note this line, uncomment it later
      infowindow.setContent(speakers[i].desc);
      infowindow.open(map, marker);
      marker.open = true;
    }
    else {
      infowindow.close();
      marker.open = false;
    }
  }
})(marker, i));
var reference=speakers[i];
(reference===speakers[i])