Chciałbym wyłapać każdy zgłoszony błąd niezdefiniowanej funkcji. Czy w JavaScript jest dostępna funkcja globalnej obsługi błędów? Przypadek użycia przechwytuje wywołania funkcji z pamięci flash, które nie są zdefiniowane.
javascript
dom-events
Brian Tompsett - 汤 莱恩
źródło
źródło
Odpowiedzi:
Czy to pomaga ci:
Nie jestem jednak pewien, jak radzi sobie z błędami Flasha ...
Aktualizacja: nie działa w Operze, ale teraz hakuję Dragonfly, aby zobaczyć, co dostaje. Sugestia dotycząca hakowania Dragonfly pochodzi z tego pytania:
Okno naśladować. onerror w Operze przy użyciu javascript
źródło
window.onerror = function() { alert(42) };
teraz kod w odpowiedzi:window.onerror = function() { alert("Error caught"); };
nie przesłonięty, wciąż nie jestem pewien ..Jak wyłapywać nieobsługiwane błędy JavaScript
Przypisz
window.onerror
zdarzenie do procedury obsługi zdarzenia, takiej jak:Jak skomentowano w kodzie, jeśli zwróconą wartością
window.onerror
jest,true
to przeglądarka powinna ukryć wyświetlanie okna dialogowego z ostrzeżeniem.Kiedy uruchamia się zdarzenie window.onerror Event?
W skrócie, zdarzenie jest wywoływane, gdy 1.) wystąpi nieprzechwycony wyjątek lub 2.) wystąpi błąd czasu kompilacji.
Przeglądarki obsługujące window.onerror
Zrzut ekranu:
Przykład powyższego kodu onerror w akcji po dodaniu go do strony testowej:
Przykład raportowania błędów AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Bibliografia:
źródło
throw
jest wykonywany ręcznie. stackoverflow.com/questions/15036165/…wyrafinowana obsługa błędów
Jeśli obsługa błędów jest bardzo wyrafinowana i dlatego może sam wygenerować błąd, przydatne jest dodanie flagi wskazującej, czy użytkownik znajduje się już w „trybie obsługi błędów”. Tak jak:
W przeciwnym razie możesz znaleźć się w nieskończonej pętli.
źródło
handleError
metody.Wypróbuj Atatus, który zapewnia zaawansowane śledzenie błędów i monitorowanie rzeczywistych użytkowników w nowoczesnych aplikacjach internetowych.
Pozwól, że wyjaśnię, jak uzyskać ślady stosu, które są w miarę kompletne we wszystkich przeglądarkach.
Błąd obsługi w JavaScript
Nowoczesne Chrome i Opera w pełni obsługują specyfikację wersji roboczej HTML 5 dla ErrorEvent i
window.onerror
. W obu tych przeglądarkach można odpowiednio użyćwindow.onerror
lub powiązać zdarzenie „błąd”:Niestety Firefox, Safari i IE są nadal dostępne i my też musimy je wspierać. Ponieważ stacktrace nie jest dostępny w
window.onerror
musimy wykonać trochę więcej pracy.Okazuje się, że jedyne, co możemy zrobić, aby uzyskać ślady stosu z błędów, to owinąć cały nasz kod w
try{ }catch(e){ }
blok, a następnie spojrzeće.stack
. Możemy nieco ułatwić ten proces dzięki funkcji o nazwie wrap, która przyjmuje funkcję i zwraca nową funkcję z dobrą obsługą błędów.To działa. Każda funkcja, którą ręcznie zawijasz, będzie dobrze obsługiwać błędy, ale okazuje się, że w większości przypadków możemy to zrobić automatycznie.
Zmieniając globalną definicję
addEventListener
tak, aby automatycznie zawijała wywołanie zwrotne, możemy automatycznie wstawiaćtry{ }catch(e){ }
większość kodu. Dzięki temu istniejący kod nadal działa, ale dodaje wysokiej jakości śledzenie wyjątków.Musimy również upewnić się, że
removeEventListener
nadal działa. W tej chwili tak się nie stanie, ponieważ argument doaddEventListener
został zmieniony. Znów musimy tylko to naprawić naprototype
obiekcie:Prześlij dane błędu do swojego zaplecza
Dane o błędach można wysyłać za pomocą znacznika obrazu w następujący sposób
Oświadczenie: Jestem programistą internetowym na https://www.atatus.com/ .
źródło
http://yourserver.com
), aby odbierać i przechowywać. Jeśli wybierzesz atatus.com , nie musisz nic robić. Wystarczy dołączyć dwie linie skryptu na swojej stronie.Wygląda na to, że
window.onerror
nie zapewnia dostępu do wszystkich możliwych błędów. W szczególności ignoruje:<img>
błędy ładowania (odpowiedź> = 400).<script>
błędy ładowania (odpowiedź> = 400).window.onerror
w nieznany sposób (jquery, angular, itp.).Oto początek skryptu, który wyłapuje wiele z tych błędów, dzięki czemu możesz dodać bardziej niezawodne debugowanie do swojej aplikacji podczas programowania.
Można go użyć w następujący sposób:
Pełny skrypt ma domyślną implementację, która próbuje wydrukować częściowo czytelną „wyświetlaną” wersję otrzymanego obiektu / błędu. Może być wykorzystany jako inspiracja do obsługi błędów specyficznych dla aplikacji. Domyślna implementacja zachowuje również odwołanie do ostatnich 100 jednostek błędów, dzięki czemu można je sprawdzić w konsoli internetowej po ich wystąpieniu, np .:
Uwaga: Działa to poprzez zastąpienie metod w kilku konstruktorach przeglądarki / natywnych. Może to mieć niezamierzone skutki uboczne. Przydało się to jednak podczas programowania, aby dowiedzieć się, gdzie występują błędy, aby wysłać dzienniki do usług takich jak NewRelic lub Sentry podczas programowania, abyśmy mogli mierzyć błędy podczas programowania oraz podczas przemieszczania, abyśmy mogli debugować to, co się dzieje głębszy poziom. Następnie można go wyłączyć w produkcji.
Mam nadzieję że to pomoże.
źródło
źródło
Należy również zachować wcześniej skojarzone wywołanie zwrotne onerror
źródło
Jeśli chcesz ujednoliconego sposobu obsługi zarówno nieprzechwyconych błędów, jak i nieobsługiwanych odrzuceń obietnic, możesz zajrzeć do nieprzechwyconej biblioteki .
EDYTOWAĆ
Słucha okna. nieobsługiwane odrzucenie oprócz window.onerror.
źródło
Polecam wypróbować Trackjs .
To rejestrowanie błędów jako usługa.
Jest niezwykle prosty w konfiguracji. Wystarczy dodać jeden wiersz <script> do każdej strony i to wszystko. Oznacza to również, że będzie niezwykle łatwy do usunięcia, jeśli zdecydujesz, że ci się nie podoba.
Istnieją inne usługi, takie jak Sentry (który jest open-source, jeśli możesz hostować własny serwer), ale nie robi to, co robi Trackjs. Trackjs rejestruje interakcję użytkownika między jego przeglądarką a serwerem WWW, dzięki czemu można faktycznie śledzić kroki użytkownika, które doprowadziły do błędu, w przeciwieństwie do samego odwołania do pliku i numeru linii (i może śledzenia stosu).
źródło
Słuchasz zdarzenia onerror, przypisując funkcję do window.onerror:
źródło