是否有可能知道在页面的特定DOM元素上触发特定事件的javascript代码行是什么?
例如,如果你去那里:http://www.gamempire.it/,那么可以拖动页面标识的代码行是什么(class =“brand master”)。
由于
答案 0 :(得分:6)
这就是我在Firebug中调试它的方法,纯粹通过控制台:
下载Firebug 1.12b1或更高版本,它具有getEventListeners
命令行API功能(Chrome也有此功能)。
在HTML面板中选择元素,使其可用$0
。
getEventListeners($0)
- >对象{click = [1],mousedown = [1],remove = [1]}
(啊,所以它有一个mousedown听众。很好。)
getEventListeners($0).mousedown[0].listener + ""
- > “function(e){return typeof jQuery!== core_strundefined&&(!e || jQuery.event.triggered!== e.type)?jQuery.event.dispatch.apply(eventHandle.elem,arguments):undefined ;}“
(内部jQuery包装器。让我们来解决这个问题。)
$._data($0, 'events')
- >对象{remove = [1],mousedown = [1],click = [1]}
f = $._data($0, 'events').mousedown[0].handler
f + ""
- > “function(e){return t._mouseDown(e)}”
(Hm。t
看起来不是全局的,但我们可以使用Firebug(非常非标准的)闭包访问器语法来解决这个问题。)
f.%t._mouseDown + ""
- > “function(){var i,s = this._super,a = this._superApply; return this._super = e,this._superApply = t,i = n.apply(this,arguments),this._super = s, this._superApply = A,I}“
f.%._mouseDown.%n + ""
- > ......一大堆代码,最终看起来很相似。
在某些时候,应该可以停止进程并开始设置断点,拖动徽标,然后单步执行相关代码,但这个仅限控制台的过程对我来说非常直接习惯了。
在Chrome中,几乎相同的方法应该适用,除了必须用控制台中的扩展对象替换.%
语法,然后单击<function scope>
。遗憾的是,它不可能在控制台中使用函数,但你仍然可以通过想要的函数在其中设置断点。 (旁注:Firebug相当于在DOM面板中打开对象,检查后者的“显示闭包”选项,并展开“(闭包)”。你可以然后返回到控制台右键单击 - &gt;“在命令行中使用”,但它仍然比替代IMO更笨拙。)
Chrome的另一种方法是转到“来源”面板,为“mousedown”设置“事件侦听器断点”,单击徽标,然后单步执行直到达到想要的功能(最好使用漂亮的打印)已启用 - 使用底部的{}图标。这可能更容易。 :)
或者,如果您确实问过哪一段代码添加了事件监听器:最简单的方法是检查我们刚刚找到的函数周围的代码。库的add-event-listener函数中的断点也可以工作。
答案 1 :(得分:2)
在Vista上通过FireFox使用Firebug 1.12.6
...
单击复选框时,标签会隐藏;使用Firebug检查该元素显示在单击时应用了内联样式(可以安全地假设有一个JavaScript,某处,应用这些样式)。
...您可能需要刷新浏览器。
在Firebug HTML面板中,选择违规/特定DOM元素,启用“在Mutate上启用中断”(面板右上方Firebug图标下方的橙色暂停按钮)... < / p>
...并采取措施重复此问题(在这种情况下,我需要点击复选框)。
最后,既然您的代码已在break事件中停止,请单击“Script”部分的“Stack”选项卡...
...从那里,您应该能够找到违规JavaScript的来源。
我不确定这是否是最好的方法,但在这种情况下,它对我有用。