Prawdą jest, że w nowoczesnych przeglądarkach podpięcie window.onerror pod kątem błędów, które pojawiają się na samej górze, wraz z dodaniem modułów obsługi zdarzeń jQuery dla błędów Ajax, wyłapuje praktycznie wszystkie obiekty Error wrzucane do kodu klienta. Jeśli ręcznie konfigurujesz program obsługi dla window.onerror, w nowoczesnych przeglądarkach odbywa się to window.addEventListener('error', callback)
, podczas gdy w IE8 / 9 musisz wywołać
window.attachEvent('onerror', callback)
.
Zauważ, że powinieneś następnie rozważyć środowisko, w którym te błędy są obsługiwane, i powód tego. Wyłapywanie jak największej liczby błędów za pomocą ich śledzenia stosu to jedno, ale pojawienie się nowoczesnych narzędzi programistycznych F12 rozwiązuje ten przypadek użycia podczas lokalnego wdrażania i debugowania. Punkty przerwania itp. Dają więcej danych niż są dostępne w programach obsługi, szczególnie w przypadku błędów zgłaszanych przez biblioteki innych firm, które zostały załadowane z żądań CORS. Musisz podjąć dodatkowe kroki, aby poinstruować przeglądarkę, aby udostępniła te dane.
Kluczowym problemem jest dostarczenie tych danych w środowisku produkcyjnym, ponieważ Twoi użytkownicy mają gwarancję, że będą uruchamiać znacznie szerszą gamę przeglądarek i wersji, niż możesz przetestować, a Twoja witryna / aplikacja będzie się łamać w nieoczekiwany sposób, niezależnie od tego, ile kontroli jakości rzucisz to.
Aby sobie z tym poradzić, potrzebujesz narzędzia do śledzenia błędów produkcyjnych, które wychwytuje każdy błąd zgłaszany w przeglądarkach użytkownika, gdy używają Twojego kodu, i wysyła je do punktu końcowego, gdzie dane mogą być przeglądane przez Ciebie i używane do naprawiania błędów w miarę ich występowania . W Raygun (zrzeczenie się: pracuję w Raygun) włożyliśmy sporo wysiłku, aby zapewnić doskonałe wrażenia, ponieważ istnieje wiele pułapek i problemów, które należy wziąć pod uwagę, których naiwna implementacja zostanie pominięta.
Na przykład jest szansa, że będziesz łączyć i minimalizować swoje zasoby JS, co oznacza, że błędy wyrzucane ze zminimalizowanego kodu będą zawierały niepotrzebne ślady stosu z zniekształconymi nazwami zmiennych. W tym celu potrzebujesz narzędzia do kompilacji do generowania map źródłowych (zalecamy UglifyJS2 dla tej części potoku), a moduł śledzenia błędów do akceptowania i przetwarzania tych map, zmieniając zniekształcone ścieżki stosu z powrotem w czytelne dla człowieka. Raygun robi to wszystko po wyjęciu z pudełka i zawiera punkt końcowy interfejsu API do akceptowania map źródłowych w miarę ich generowania przez proces kompilacji. Jest to kluczowe, ponieważ muszą być niepubliczne, w przeciwnym razie każdy mógłby unieszkodliwić Twój kod, negując jego cel.
Raygun4js biblioteki klienta jest również wyposażony window.onerror
zarówno dla nowoczesnych i starszych przeglądarek, jak również jQuery haki out-of-the-box, tak aby ustawić to trzeba tylko dodać:
<script type="text/javascript" src="//cdn.raygun.io/raygun4js/raygun.min.js" </script>
<script>
Raygun.init('yourApiKey').attach();
</script>
Istnieje również wiele wbudowanych funkcji, w tym możliwość mutowania ładunku błędu przed jego wysłaniem, dodawanie tagów i niestandardowych danych, metadanych użytkownika, który widział błąd. Eliminuje to również ból związany z uzyskiwaniem dobrych śladów stosu z wyżej wymienionych skryptów CORS innych firm, co rozwiązuje przerażający „błąd skryptu” (który nie zawiera komunikatu o błędzie ani śladu stosu).
Bardziej istotnym problemem jest to, że ze względu na ogromną liczbę odbiorców w sieci witryna wygeneruje wiele tysięcy zduplikowanych wystąpień każdego błędu. Usługa śledzenia błędów, taka jak Raygun, ma sprytne rozwiązania, które pozwalają łączyć je w grupy błędów, dzięki czemu nie utoniesz w zalewie powiadomień i możesz zobaczyć każdy faktyczny błąd gotowy do naprawienia.