Gmap.addoverlay()
会导致地图缩小,如果您调用了getEarthInstance()
。
使用ge插件6.2.1.6014,Chrome / Mac OSX和{Firefox,Chrome} / Windows Vista家庭高级版(在Google Earth API issues上交叉发布)。请参阅测试代码here。
第二个标记出现后不久,即使没有人要求,地图也会缩小。
通过在该回调中放置alert()
并延长timeout()
间隔,我非常确定问题发生的是addOverlay()
,而不是getEarthInstance()
。
为了免疫我的代码,我在回调中尝试了注释代码,但到那时显然为时已晚。
那么,有没有办法在不调用getEarthInstance()
的情况下确定插件的版本?也许是google.load
的一些黑客攻击?如果没有一个干净的方法来检测插件的版本,只要这个版本的插件中的任何一个都安装在那里,我就必须禁用G_SATELLITE_3D_MAP
,我想,几乎是永远的?
我正在调用getEarthInstance()
,因为我想启用几个图层并在地球上设置点击监听器。是否可以在没有getEarthInstance()
的情况下执行其中任何一项?
答案 0 :(得分:0)
我没有广泛使用Maps API的v2,所以这可能是一个众所周知的行为,但这确实是一个错误。我建议在Maps API v2 issue tracker上进行归档,因为插件本身(或插件API)无法真正做任何改变地图视图的事情。
请注意,API的v2已被弃用(自2010年5月起!),因此它们仅修复了回归。另外,您应该考虑切换到API的v3;甚至还有一个方便的library for Earth API integration。
与此同时,有一些方法可能有所帮助:
您是否有理由检查版本号 插入?最近有一些API增加了 发布,但我不确定6.2中的什么会成为交易破坏者。该 插件使用与Google地球相同的自动更新程序已有一段时间了 现在,所以绝大多数用户都是最新版本的 无论如何插件。在5.x和6.0上有一些坚持 具体原因,但确实不是很多。几乎 访问您网站的每个人都应该进行isSupported()检查 足够的,如果不是,他们可能有目的地选择了 出来并知道为什么事情不起作用。
既然你正在加载地球Javascript库,你可以 考虑只是加载一个插件的实例而不涉及 API。 google.earth.createInstance会帮助你 (如果重要,你可以使用隐藏的html元素,只需确保 分离它,并在你完成时将它收集起来。 启动插件实例然后会有一些开销 抛弃它,但它只是启动它,这是非常小的 你已经在这里了下一个插件实例也将是 视图切换到3D时创建得更快。
答案 1 :(得分:0)
对于任何受到这个bug攻击的人,感谢Kenny先生的回答中的建议,这里有一些代码可以检查插件版本而不会成为我们试图避免的bug的受害者:
function enable_geplugin(map, div, callback) {
if (!google.earth.isSupported())
return;
var earth_div = document.createElement('div');
document.body.appendChild(earth_div);
earth_div.style.height = '1px';
earth_div.style.width = '1px';
google.earth.createInstance(
earth_div,
function(instance) {
if (!instance.getPluginVersion().match(/^6\.2\./)) {
map.addMapType(G_SATELLITE_3D_MAP);
if (callback)
map.getEarthInstance(callback);
}
earth_div.style.display = 'none';
document.body.removeChild(earth_div);
},
function(errorCode) {
// do this so user can click on map type "Earth" and see the download instructions
map.addMapType(G_SATELLITE_3D_MAP);
earth_div.style.display = 'none';
document.body.removeChild(earth_div);
}
);
}
例如,使用here。
(在OSX / Chrome上,document.body.removeChild(earth_div)
会生成未捕获的ReferenceError:NPObject已删除,但这是我最不担心的事情。)
因此,我们现在可以有效地禁用G_SATELLITE_3D_MAP用于错误的插件版本,但我仍然希望有人在插件上修复错误。