在第三方库中使用异步函数调试JavaScript?

在第三方库中使用异步函数调试JavaScript?,javascript,debugging,google-maps-api-3,Javascript,Debugging,Google Maps Api 3,我在和你一起工作;那里的文件test5.html允许你放置一个标记,当你点击它时,你会得到一个表单来编辑它的属性: 我首先添加了一些额外的按钮,可以添加带有预填充数据的标记。然后,我单击它们以显示表单,我不编辑表单中的任何内容,然后按“取消”。大约半秒到一秒之后,我进入浏览器控制台: TypeError: a.url.substr is not a function util.js:202:114 我非常希望消除这个错误(注意,它不会出现在原始的test5.html中) 问题是-首先,我不

我在和你一起工作;那里的文件
test5.html
允许你放置一个标记,当你点击它时,你会得到一个表单来编辑它的属性:

我首先添加了一些额外的按钮,可以添加带有预填充数据的标记。然后,我单击它们以显示表单,我不编辑表单中的任何内容,然后按“取消”。大约半秒到一秒之后,我进入浏览器控制台:

TypeError: a.url.substr is not a function  util.js:202:114
我非常希望消除这个错误(注意,它不会出现在原始的
test5.html
中)

问题是-首先,我不知道这个函数是什么或做什么;我发现:

没有未压缩的库。所有API方法都是根据发布的文档访问的,因此不需要非压缩版本

是的,对-绝对没有必要,当然!当然,这并不是谷歌对他们的财产严加控制——只是没有人需要知道到底发生了什么,因为不可能陷入如此糟糕的问题
:)

无论如何,Firefox吐出的堆栈跟踪是:

rz.prototype.load http://maps.googleapis.com/maps-api-v3/api/js/26/17/util.js:202:114
qz.prototype.load http://maps.googleapis.com/maps-api-v3/api/js/26/17/util.js:201:427
_.yz.prototype.load http://maps.googleapis.com/maps-api-v3/api/js/26/17/util.js:204:224
dz.prototype.load http://maps.googleapis.com/maps-api-v3/api/js/26/17/util.js:200:287
cz.prototype.load http://maps.googleapis.com/maps-api-v3/api/js/26/17/util.js:199:133
SS http://maps.googleapis.com/maps-api-v3/api/js/26/17/marker.js:5:217
WS http://maps.googleapis.com/maps-api-v3/api/js/26/17/marker.js:7:482
XS http://maps.googleapis.com/maps-api-v3/api/js/26/17/marker.js:7:116
VS.prototype.Y http://maps.googleapis.com/maps-api-v3/api/js/26/17/marker.js:35:646
_.zf.prototype.L/a.F< http://maps.googleapis.com/maps/api/js:112:4221

因此,显然错误发生在
rz.prototype.load
中,并且是由
\uzf.prototype.L/a.F发起的。好吧,我设法解决了这个问题——即使投票结果表明问题“太广泛”

首先,如果API中的“正面”javascript是:

<script src="http://maps.googleapis.com/maps/api/js?v=3.26&libraries=drawing,geometry" type="text/javascript"></script>
。。。并在HTML中使用此文件,而不是在线文件:

<script src="gmapsapi.js" type="text/javascript"></script>
。。。以便以后能够在一行上设置断点

现在,在Firefox中打开保存的HTML文件,打开Firebug,在脚本选项卡中查找
gmapsapi.js
,并在
var a=this上设置断点

现在运行这些东西——在我的情况下,执行所有操作,包括按Cancel——JS引擎就会崩溃;然后,您可以在Firebug控制台中执行
console.trace()
,并获得此类跟踪(之后发生错误):

uzf.prototype.L()gmapsapi.js(第114行)
VS.prototype.changed(a=“modelIcon”)marker.js(第35行)
Bb(a=Object{type=“Object”},b=“modelIcon”)gmapsapi.js(第37行)
Bb(a=Object{type=“Object”},b=“icon”)gmapsapi.js(第37行)
_.k.set(a=“icon”,b=Object{type=“Object”})gmapsapi.js(第96行)
_.vc/
...
rz.prototype.load=function(a,b){
  var c=this.la;
  this.b&&"data:"!=a.url.substr(0,5)||(a=new _.ez(a.url)); // column 114 is right before a.url.substr..
  return c.load(a,function(d){
    !d&&_.m(a.crossOrigin)?c.load(new _.ez(a.url),b):b(d)
  })
};
...
tracer.traceAll(BlitzMap,true); 
tracer.traceAll(BlitzMap.getMapObj(),true); 
<script src="http://maps.googleapis.com/maps/api/js?v=3.26&libraries=drawing,geometry" type="text/javascript"></script>
wget "http://maps.googleapis.com/maps/api/js?v=3.26&libraries=drawing,geometry" -O gmapsapi.js
<script src="gmapsapi.js" type="text/javascript"></script>
_.zf.prototype.L=function(){
  var a=this;
  a.F||(a.F=window.setTimeout(function(){a.F=void 0;a.Y()},a.ql))
};
_.zf.prototype.L()                            gmapsapi.js (line 114)
VS.prototype.changed(a="modelIcon")           marker.js (line 35)
Bb(a=Object { type="object"}, b="modelIcon")  gmapsapi.js (line 37)
Bb(a=Object { type="object"}, b="icon")       gmapsapi.js (line 37)
_.k.set(a="icon", b=Object { type="object"})  gmapsapi.js (line 96)
_.vc/<(c=Object { type="object"})             gmapsapi.js (line 47)
_.k.setValues()                               gmapsapi.js (line 97)
a = Object { type="object"}
BlitzMap</this.updateOverlay()                blitz.js (line 545)
BlitzMap</this.closeInfoWindow()              blitz.js (line 514)
onclick()input[3] onclick (line 1)
event = Object { type="object"}