Javascript 在街景中显示InfoWindow(使用InfoBubble)

Javascript 在街景中显示InfoWindow(使用InfoBubble),javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,目前我有一个带有一些标记的地图(由一个XML循环加载),我正在使用一个小插件(InfoBubble)来改进infowindows。 问题是,在法线贴图中,我可以加载、显示和隐藏信息窗口,单击标记,它就会按预期工作。但是,当我切换到街景模式时,信息窗口仅第一次显示,如果我关闭它,它将不再显示,并且在尝试获取当前地图时,我从infobubble插件中得到一个错误: 未捕获类型错误:map.getDiv不是函数 加载街景时的代码(这与预期一样有效,但可能可以改进): 通过标记显示信息窗口的代码。它在街

目前我有一个带有一些标记的地图(由一个XML循环加载),我正在使用一个小插件(InfoBubble)来改进infowindows。 问题是,在法线贴图中,我可以加载、显示和隐藏信息窗口,单击标记,它就会按预期工作。但是,当我切换到街景模式时,信息窗口仅第一次显示,如果我关闭它,它将不再显示,并且在尝试获取当前地图时,我从infobubble插件中得到一个错误:

未捕获类型错误:map.getDiv不是函数

加载街景时的代码(这与预期一样有效,但可能可以改进):

通过标记显示信息窗口的代码。它在街景模式下不工作:

google.maps.event.addListener(_this.Gmap.Markers[index], 'click', function () {
    _this.Gmap.HideInfoWindows();
    _this.Gmap.HideMarkers();
    _this.Gmap.Markers[index].setVisible(true);

    if (_this.Gmap.Map.getStreetView().getVisible()) {
        _this.Gmap.InfoWindows[index].open(_this.Gmap.Map.getStreetView()); // this line throws the error
    }
    else _this.Gmap.InfoWindows[index].open(_this.Gmap.Map);
    $('.mini', '#resultados').fadeOut(250);
    _this.Gmap.ReCenterMap();
});

当我切换到街景模式时,我仍然可以看到信息窗口,但如果我关闭它,我将无法再重新打开它,出现我上面评论的错误。

InfoBubble插件与
map.getStreetView()
方法返回的街景对象不兼容

它抛出一个错误,因为它试图获取映射方法
.getDiv()
.getCenter()
.panTo()
。为了解决这个问题,我对插件做了一些修改,如下所示:

当插件尝试使用不存在的方法并抛出错误时,对于
.getDiv()

对于
.getCenter()

对于
.panTo()


修复后,我们可以成功加载街景地图的InfoBubbles,问题代码将正常工作。

您能提供一个示例吗?我也看到了这个错误,但是这个错误不应该阻止InfoBubble的显示。我希望有人能直接在发布的代码中看到任何错误。现在,我正在JSFIDLE上使用api示例代码进行一些测试(使用infowindow而不使用infobubble扩展),所有测试都运行良好。制作一个工作示例可能需要一些时间,我很快就要下班了,所以如果我现在不能解决这个问题,我将在周一做一个示例。要在
中进行开始检查,请单击
-标记处理程序,如果
索引
是您所期望的。您打开“某些”InfoBubble,但当它不是正确的InfoBubble时,它将被放置在视口之外。使用
this
作为
\u this.Gmap.InfoWindows[index]的第二个参数。open
应始终在标记位置绘制信息气泡
index
对于这两个(标记和信息窗口)都是相同的,并且都具有相同的位置。目前,我正在使用标记作为infobubble的第二个参数(
\u this.Gmap.InfoWindows[index].open(\u this.Gmap.Map.getStreetView(),\u this.Gmap.Markers[index]
),但我得到了相同的错误。我看到的是infowindow错误与映射方法
.getDiv()有关
,但该方法无法通过
.getStreetView()
使用。调试InfoBubble插件时,我可以看到它还没有准备好用于街景,因为它总是尝试从地图(不是全景图)获取
.getDiv()
方法,但对象通过
Map.getStreetView()返回
没有该方法,它只有一个名为
j
的对象,带有dom map元素。修改插件我可以正确显示信息窗口,但它会显示更多与问题相关的错误。修复插件后,我会发布一个正确解释它的答案。
j
不稳定,请使用
map.getStreetView().getContainer()
instedi想象出来的。在本例中,
map
表示
.getStreetView()
返回的对象,因此正确答案应该是
map.getContainer()
。答案已编辑。非常感谢您的帮助@Dr.Molle
google.maps.event.addListener(_this.Gmap.Markers[index], 'click', function () {
    _this.Gmap.HideInfoWindows();
    _this.Gmap.HideMarkers();
    _this.Gmap.Markers[index].setVisible(true);

    if (_this.Gmap.Map.getStreetView().getVisible()) {
        _this.Gmap.InfoWindows[index].open(_this.Gmap.Map.getStreetView()); // this line throws the error
    }
    else _this.Gmap.InfoWindows[index].open(_this.Gmap.Map);
    $('.mini', '#resultados').fadeOut(250);
    _this.Gmap.ReCenterMap();
});
var mapDiv = typeof map.getDiv === "function" ? map.getDiv() : map.getContainer();
var centerPos = projection.fromLatLngToContainerPixel(typeof map.getCenter === "function" ? map.getCenter() : map.position);
if (typeof map.getCenter === "function") {
    if (map.getCenter() != latLng) {
        map.panTo(latLng);
    }
}