centi.sk odborne bez komentára

Logovanie javascriptových chýb

Moderné webové aplikácie sú plné javascriptov, a tie sú plné chýb. Väčšinu z chýb sa podarí v priebehu vývoja a testovania odhaliť, ale v praxi je takmer nemožné odhaliť ich všetky.

Najlepšími a zároveň najhoršími testermi sú samotní užívatelia aplikácie. Najlepší sú preto, lebo je ich omnoho viac ako našich interných testerov a hlavne používajú aplikáciu v reálných podmienkach. Najhorší sú preto, lebo nikto z nich nám prípadnú chybu neohlási, akurát sa naserie :). Našťastie však existuje jednoduchý spôsob, ako sa na prípadné chyby upozorniť vlastnými silami.

Na riešenie som narazil v článku How to log JavaScript errors. Každý moderný prehliadač* umožňuje zaregistrovať si onerror event handler, ktorý sa zavolá pri každej javascriptovej chybe a v podobe parametrov dostane údaje o danej chybe:

  • Chybová hláška
  • Cesta k súboru, v ktorom nastala chyba
  • Číslo riadku, na ktorom nastala chyba

Jednoduchý monitoring chýb môže potom vyzerať napríklad takto (prevzaté z uvedeného článku):

window.onerror = function(errorMessage, url, line) {
    var loggerUrl = "https://www.xing.com/js/logger";
    var parameters = "?description=" + escape(errorMessage)
        + "&url=" + escape(url)
        + "&line=" + escape(line)
        + "&parent_url=" + escape(document.location.href)
        + "&user_agent=" + escape(navigator.userAgent);

    /** Send error to server */
    new Image().src = loggerUrl + parameters;
};

Uvedený príklad používa na logovanie vytvorenie obrázka smerujúceho na monitorovaciu URL obohatenú o informácie o chybe, či prostredí. Samozrejme je možné namiesto toho použiť AJAX, uvedené obrázkové riešenie však netrpí obmedzením na rovnakú doménu ako AJAX.

* Prehliadače s WebKit jadrom obsahujú chybu, ktorá bohužial znemožňuje takýto monitoring, pretože event handler nedostane informácie o chybe.