Choseho weblog o webu

Zachytávání chyb a vyjímek v JavaScriptu u klienta na server

21. 05. 2004

Od "pradávných dob" webmasteři navštěvovaných webů bojují s JavaScriptem. Nejde ani tak o jeho syntaxi, ale o funkčnost (nebo spíše nefunkčnost) v širokém pásmu zobrazovacích zařízení. Určitě velice pomáhá DOM, který je nyní vesměs plně podporován, ale díky neomezenému počtu kombinací různých překážek na straně klienta se ne vždy se podaří vše odladit.

Pokud chceme mít své javascripty co nejvíce odladěné, musíme především o dané chybě vědět. A to je u javascriptu nejhorší. Uživatel zpravidla chybovou hlášku odklikne, ignoruje nebo se mu vůbec nezobrazí.

Autor webu se pomocí dvou technik v javascriptu může o chybě dozvědět a navíc ji může pomocí jednoduchého triku zapisovat do logů serveru.

Try-catch

Tato metoda se hodí tam, kde si potřebujeme být jisti, že se určitá část skriptu provedla bez problému. Do try bloku lze uzavřít libovolnou část kódu nebo funkce a pokud při zpracování dojde k jakékoliv chybě zavolá se blok catch.

Obecný zápis je takto:

try {
   kód
}
catch (proměnná) {
   kód
}

V jednoduché ukázce si můžete try-catch prohlédnout v akci. Tento zápis funguje ve všech moderních prohlížečích (IE5+, Mozilla, Opera, Safari...).

Více informací k try-catch-throw naleznete například na devedge.netscape.com nebo přes Googl.

Globální zachytávání chyb přes window.onerror

Pokud chceme kontrolovat všechny javascripty na webu, je ideální "pověsit" na událost onerror svoji funkci, která bude chyby zpracovávat. Vypadá to asi takto:

<script type="text/javascript">
function er(a,b,c) {
	alert(a);
	return true;
}
window.onerror = er;
</script>

Samozřejmě i pro tento způsob jsem připravil ukázku. Příklad je stejný jako předchozí, jen se liší ve způsobu zachycení chyby.

Zapisování chyb na server

Dostat na server chybovou hlášku nebo obecně jakoukoliv informaci od klienta je velice jednoduché. Pokud nemáte přístup do logů Apache, tak plně postačí i jednoduchý PHP skript, který data někam uloží. Celý "trik" spočívá v poslání potřebných parametrů v URL, tedy klasicky přes GET, jako když děláte odkaz, ale místo odkazu dáte parametry do obrázku. Použití v javascriptu:

objekt_obr = new Image;
objekt_obr.src = "http://www.server.cz/log.php?chyba=neco&popis=neco";

Takto je to jednoduché. V případě že máte přistup do logů od serveru, lze nahrát na server prázdný 1px obrázek a na tento obrázek dávat požadavky. V kódu zaměňte log.php třeba za log.gif a poté potřebné informace vcelku bez problému vytáhnete z logu serveru. Log serveru nám může poskytnout automaticky informace o prohlížeči, pokud log nemáme, PHP tuto informaci také dokáže získat.

Autor: Chose| 16:41 - 21. 05. 2004 | Trvalý odkaz | Homepage



© 2004 Josef Šíma - ja@chose.cz