在浏览器控制台中监控所有JavaScript事件

kno*_*opx 54 javascript events

是否可以收听所有javascript事件?

我试图猜测在AJAX请求修改DOM之后是否触发了事件.

Xav*_*avi 98

使用firebugweb检查员,您可以使用monitorEvents:

monitorEvents(myDomElem);
Run Code Online (Sandbox Code Playgroud)

这将打印myDomElem发送到控制台的所有事件.使用unmonitorEvents停止监视事件.

如果您对DOM被操纵后获取事件感兴趣,请查看Mutation Events.

编辑:

据我所知,没有简单的方法来拦截onreadystatechange所有XMLHttpRequest中的所有事件.我能想到的唯一解决方法是使用您自己的实现覆盖本机XMLHttpRequest对象.例如:

(function() { // Overriding XMLHttpRequest
    var oldXHR = window.XMLHttpRequest;

    function newXHR() {
        var realXHR = new oldXHR();

        realXHR.addEventListener("readystatechange", function() { 
            console.log("an ajax request was made") 
        }, false);

        return realXHR;
    }

    window.XMLHttpRequest = newXHR;
})();
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,这是非常hacky,通常是不明智的.

  • 是的,http://api.jquery.com/ajaxSuccess/只是挂钩jQuery的XHR包装器,所以没有捕获到真正的JS事件.然而,这个黑客应该做的伎俩:) (2认同)
  • "一般不明智" - 为什么? (2认同)
  • 更新:`monitorEvents` 在 Chrome 中也能正常工作。 (2认同)
  • @JanDvorak 这通常是不明智的,因为它使浏览器环境变得更加不可预测。例如,想象一下有一天 XMLHttpRequest 构造函数开始允许参数吗?我上面提供的实现忽略了所有构造函数参数,这意味着它可能会在未来的某个时间默默地中断。当它发生时,可能会导致许多令人困惑和令人沮丧的错误。这篇博文提到了为什么这是一个坏主意的其他原因:http://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects-you-down-own/ (2认同)

小智 11

monitorEvents(myDomElem)如果你想要除了鼠标事件之外的所有东西,那么你可以输入Xavi的答案unmonitorEvents(myDomElem, 'mouse').

http://www.briangrinstead.com/blog/chrome-developer-tools-monitorevents有一篇关于使用chrome监视器事件的文章.