2012-11-06 22 views
7

Poiché i sistemi in questi giorni stanno diventando sempre più Javascript (jQuery, AJAX, ecc.), Abbiamo cercato di ottenere sempre più errori di registrazione che si verificano per una di queste cose .Registrazione globale errori jQuery (errori evento e DOM)


La mia preoccupazione è che all'interno di jQuery per sé, quando normale manipolazione del DOM/eventi jQuery vengono creati o eseguiti, window.onerror non è in grado di catturare questi, e questo potrebbe contribuire a rendere i bug di debug in produzione più veloce, facendoli registrati sul server

In questo articolo a partire dal 2008 (.onerror & jQuery bind try/catch{}), aggiungono un try/catch {} alla jQuery.bind() event e anche l'evento document.ready. Ora che tutto passa attraverso l'evento .on() questo articolo è un po 'datato, ma sento che la logica potrebbe ancora funzionare ...

Qualcuno ha provato a implementare una tale sovrascrittura jQuery (sistema try/catch) nei propri progetti?

In pratica, voglio continuare a utilizzare jQuery dal CDN e solo all'interno di uno dei nostri file JS: estendere/ignorare gli eventi .on()/$(document).ready()/etc con queste modifiche.

jQuery.fn.extend({ // <-- can this be extended/overwritten ? 
    on: function(etc etc) { 
     // same code just add the additional 
     try { 
      // try to execute the original .on() 
     } 
     catch (ex) { 
      // log any errors/info (where/why/etc) 
     } 
    } 
}); 

// or even some sort of try/catch for $(document).ready()? 

Gli altri formati di registrazione tipico errore: (ovviamente il browser logging/OS/QueryString/etc troppo)

window.onerror = function (msg, url, line) { 
    // Log General Javascript Errors 
    // this won't log jQuery internal errors 
}; 

$.ajaxSetup({ // Log AJAX Errors 
    error: function (jqXHR, ajaxSettings, thrownError) { } 
}); 
+0

Non facciamo errori dove lavoro? – adeneo

+0

:) Beh, certo, chi commette errori in questi giorni. Il problema è che abbiamo a che fare con un sacco di computer/browser legacy che casualmente incontrano gli errori più strani con alcune delle nostre pagine. Sto solo cercando di ottenere una soluzione completa per registrarli, forse in quel modo potremmo risolverli. qualche idea? –

risposta

3

Riportiamo errori JavaScript al server in window.onerror e gli errori ajax jQuery, senza sovrascrivere jQuery e funziona bene. Se vuoi sovrascrivere una funzione jQuery, puoi fare:

$.fn.oldOn = $.fn.on; 
$.fn.on = function(a,b,c,d,e,f) { 
    try { 
     $(this).oldOn(a,b,c,d,e,f); 
    } 
    catch (ex) { ... } 
}; 
+0

Oh bene, quindi hai fatto try/catch all'interno di eventi/codice jQuery? Credo che la mia più grande domanda fosse se è possibile sovrascrivere '.on()' per esempio, aggiungendo il try/catch, senza dover effettivamente modificare il file jQuery stesso. –

+0

Probabilmente non ero chiaro, mi dispiace. Abbiamo usato gestori di errori come suggerisci * senza * sovrascrivendo il try/catch e trovato che ha funzionato bene. Ma puoi scavalcarlo se vuoi. Aggiornerò la risposta –

+0

Fantastico! Non ho nemmeno pensato di configurarlo in questo modo. Complimenti Parched, di bell'aspetto. Mi sento come se avessi ottenuto il 99% di tutto ciò che è stato coperto ora con questa aggiunta –

Problemi correlati