Můžete zkusit nastavit vlastní obslužnou rutinu pro událost onerror a pomocí XMLHttpRequest sdělit serveru, co se pokazilo, ale protože to není součástí žádné specifikace, podpora je poněkud nespolehlivá.
Zde je příklad z použití XMLHttpRequest k protokolování chyb JavaScriptu:
window.onerror = function(msg, url, line)
{
var req = new XMLHttpRequest();
var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
req.open("POST", "/scripts/logerror.php");
req.send(params);
};
Krátká odpověď: Ano, je to možné.
Delší odpověď: Lidé již psali o tom, jak můžete tento problém (alespoň částečně) vyřešit napsáním vlastního kódu. Všimněte si však, že existují služby, které, jak se zdá, zajistily, že potřebný kód JS funguje v mnoha prohlížečích. Našel jsem následující:
- http://trackjs.com
- https://www.atatus.com
- http://jserrlog.appspot.com
- http://muscula.com
- https://sentry.io
- https://rollbar.com
- https://catchjs.com
Nemohu mluvit za žádnou z těchto služeb, protože jsem je ještě nevyzkoušel.
Právě jsem implementoval protokolování chyb na straně serveru na chyby javascriptu na projektu v práci. Existuje směs starého kódu a nového kódu pomocí jQuery.
Používám kombinaci window.onerror
a zabalení obslužných rutin událostí jQuery a funkce onready do funkce zpracování chyb (viz:Sledování chyb JavaScriptu:Proč window.onerror nestačí).
window.onerror
:zachytí všechny chyby v IE (a většinu chyb ve Firefoxu), ale nedělá nic v Safari a Opeře.- Obslužné rutiny událostí jQuery:zachycuje chyby událostí jQuery ve všech prohlížečích.
- Funkce jQuery ready:zachytí chyby inicializace ve všech prohlížečích.
Jakmile chybu zachytím, přidám k ní nějaké další vlastnosti (url, prohlížeč atd.) a poté ji odešlem zpět na server pomocí volání ajax.
Na serveru mám malou stránku, která pouze přebírá zaslané argumenty a odesílá je do našeho normálního rámce protokolování serveru.
Rád bych pro to otevřel zdrojový kód (jako plugin jQuery). Pokud má někdo zájem, dejte mi vědět, pomohlo by to přesvědčit šéfy!