2010-08-15 11 views
48

Czy można słuchać wszystkich zdarzeń javascript?Monitorowanie wszystkich zdarzeń JavaScript w konsoli przeglądarki

Próbuję zgadnąć, czy zdarzenie wywołane po modyfikacji DOM przez żądanie AJAX.

+0

Sprawdź pod Mutacja tutaj: http://en.wikipedia.org/wiki/DOM_events#Common.2FW3C_events są te wydarzenia, które Cię interesują? –

+0

Szukam sposobu na przechwycenie zdarzenia onreadystatechange na wszystkich XMLHttpRequest – knoopx

Odpowiedz

93

Z firebug lub web inspector można użyć monitorEvents:

monitorEvents(myDomElem); 

Powoduje wydrukowanie wszystkich zdarzeń emitowanych przez myDomElem do konsoli. Użyj opcji unmonitorEvents, aby zatrzymać monitorowanie zdarzeń.

Jeśli chcesz uzyskać informacje o wydarzeniach po manipulowaniu DOM, spójrz na numer Mutation Events.

Edit:

O ile mi wiadomo, nie ma łatwego sposobu, aby przechwytywać wszystkie onreadystatechange wydarzenia ze wszystkich XMLHttpRequest. Jedynym sposobem obejścia tego problemu jest zastąpienie natywnego obiektu XMLHttpRequest własną implementacją. Na przykład:

(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; 
})(); 

Nie trzeba dodawać, że jest to bardzo hacky i ogólnie nierozważne.

+2

tak, http://api.jquery.com/ajaxSuccess/ po prostu przechwytuje opakowanie XHR jQuery, więc żadne prawdziwe zdarzenie JS nie jest przechwytywane. Jednak ten hack powinien załatwić sprawę :) – knoopx

+2

"ogólnie nieuprawniony" - dlaczego? –

+1

Aktualizacja: 'monitorEvents' działa równie dobrze w Chrome. –

Powiązane problemy