2011-04-06 94 views
9

我面临Bing地图的主要问题。我使用: http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3Bing地图问题--p_elSource.attachEvent不是函数

首先我的萤火收到错误为:

this.CreditsFor=function(a,i,j,h) 
{ 
    var e=[]; 
    if(a!="undefined"&&a!=null&&typeof m_tableKeys[a]!="undefined"&& 
    ........ 
    MVC_Init_FlatlandView_Drawing(); 
    MVC_Init_View3D_Drawing()}; 
    if(typeof closeDependency!="undefined") 
     closeDependency("mapcontrol.js") 

之后,我把.LoadMap()调用内部的try-catch块。有人抛出异常:

p_elSource.attachEvent不是 功能

我已经尝试了被推荐在MSDN论坛whihc以下解决方案:

  • 设置VEMapOptions defualt值。调用LoadMap之前的BirdseyeOrientation()
  • 确保DOCTYPE存在

只有在启用萤火虫时才会发生这种情况。

+0

其他人有没有遇到类似的问题..或者我是唯一一个在这里面对这个问题? – ZeNo 2011-04-08 07:27:05

回答

10

芝诺,

您使用的FF4?我在FF4中遇到了问题,这是由于我的脚本调用了尚未定义的VE函数的竞争条件造成的。我得到了一个解决方案here

特别是,请注意Josh Unger的答案,他描述了如何使用setInterval等待辅助库加载并执行它的操作。

var interval = setInterval(function() { 
    if (eval("typeof VEMap") != "undefined" && 
     document.getElementById("map").attachEvent != undefined) 
    { 
     clearInterval(interval); 
     LoadMap(); 
    } 
}, 10); 

您必须更新示例代码以适合您的情况。重要的部分是避免调用VE中的任何内容,直到确定VE脚本已加载辅助库已加载的

最近使用FF4的人向我报告了这个问题。我怀疑FF4与FF3相比(可能更快的脚本执行,或脚本执行时的差异)引发了错误。在任何情况下,当我更新我的代码以延迟调用VE,直到加载库,错误消失,地图正常工作。

请注意,我没有做延迟加载,并且Firebug不是问题。这些显然是2008/2009年线索活跃的因素。

+0

我试过那个约翰尼,但那并没有太大的帮助。 – ZeNo 2011-05-02 18:34:25

+0

当我增加间隔时,这对我有效;我用1000而不是10。 – Cosmin 2011-10-20 15:04:56

+0

'if(eval(“typeofVEMap”)!=“undefined”)''需要什么?不会'如果(window.VEMap)'工作呢? – Kreegr 2012-06-26 21:23:36