Saya ingin menangkap setiap kesalahan fungsi yang tidak terdefinisi. Apakah ada fasilitas penanganan kesalahan global dalam JavaScript? Kasus penggunaan menangkap panggilan fungsi dari flash yang tidak ditentukan.
javascript
dom-events
Brian Tompsett - 汤 莱恩
sumber
sumber
Jawaban:
Apakah ini membantu Anda:
Saya tidak yakin bagaimana menangani kesalahan Flash ...
Pembaruan: tidak berfungsi di Opera, tapi saya meretas Dragonfly sekarang untuk melihat apa yang didapatnya. Saran tentang peretasan Dragonfly datang dari pertanyaan ini:
Jendela Mimic. onerror di Opera menggunakan javascript
sumber
window.onerror = function() { alert(42) };
sekarang kode dalam jawaban:window.onerror = function() { alert("Error caught"); };
tidak diganti, saya masih tidak yakin ..Cara Menangkap Kesalahan Javascript Tidak Tertangani
Tetapkan
window.onerror
acara ke pengendali acara seperti:Seperti yang dikomentari dalam kode, jika nilai baliknya
window.onerror
adalahtrue
maka browser harus menekan menampilkan dialog peringatan.Kapan acara window.onerror Fire?
Singkatnya, acara dinaikkan ketika 1.) ada pengecualian atau 2.) kesalahan waktu kompilasi terjadi.
Browser mendukung window.onerror
Tangkapan layar:
Contoh kode onerror di atas dalam tindakan setelah menambahkan ini ke halaman pengujian:
Contoh untuk pelaporan kesalahan AJAX
JSFiddle:
https://jsfiddle.net/nzfvm44d/
Referensi:
sumber
throw
dibuat secara manual. stackoverflow.com/questions/15036165/…penanganan kesalahan yang canggih
Jika penanganan kesalahan Anda sangat canggih dan karena itu mungkin menimbulkan kesalahan itu sendiri, ada baiknya menambahkan tanda yang menunjukkan jika Anda sudah dalam "errorHandling-Mode". Seperti itu:
Kalau tidak, Anda bisa menemukan diri Anda dalam loop tak terbatas.
sumber
handleError
metode.Coba Atatus yang menyediakan Pelacakan Kesalahan Tingkat Lanjut dan Pemantauan Pengguna Nyata untuk aplikasi web modern.
Biarkan saya menjelaskan cara mendapatkan stacktraces yang cukup lengkap di semua browser.
Kesalahan penanganan dalam JavaScript
Modern Chrome dan Opera sepenuhnya mendukung spesifikasi draft HTML 5 untuk ErrorEvent dan
window.onerror
. Di kedua browser ini, Anda dapat menggunakanwindow.onerror
, atau mengikat acara 'kesalahan' dengan benar:Sayangnya Firefox, Safari dan IE masih ada dan kami harus mendukungnya juga. Karena stacktrace tidak tersedia,
window.onerror
kita harus melakukan sedikit lebih banyak pekerjaan.Ternyata satu-satunya hal yang bisa kita lakukan untuk mendapatkan stacktraces dari kesalahan adalah dengan membungkus semua kode kita dalam sebuah
try{ }catch(e){ }
blok dan kemudian melihatnyae.stack
. Kita dapat membuat prosesnya lebih mudah dengan fungsi yang disebut wrap yang mengambil fungsi dan mengembalikan fungsi baru dengan penanganan kesalahan yang baik.Ini bekerja. Setiap fungsi yang Anda bungkus secara manual akan memiliki penanganan kesalahan yang baik, tetapi ternyata kami benar-benar dapat melakukannya untuk Anda secara otomatis dalam banyak kasus.
Dengan mengubah definisi global
addEventListener
sehingga secara otomatis membungkus panggilan balik kita dapat secara otomatis memasukkantry{ }catch(e){ }
sekitar sebagian besar kode. Ini memungkinkan kode yang ada terus berfungsi, tetapi menambahkan pelacakan pengecualian berkualitas tinggi.Kita juga harus memastikan itu
removeEventListener
tetap bekerja. Saat ini tidak akan karena argumen untukaddEventListener
diubah. Sekali lagi kita hanya perlu memperbaiki ini padaprototype
objek:Kirimkan data kesalahan ke backend Anda
Anda dapat mengirim data kesalahan menggunakan tag gambar sebagai berikut
Penafian: Saya seorang pengembang web di https://www.atatus.com/ .
sumber
http://yourserver.com
) untuk menerima dan menyimpan. Jika Anda memilih atatus.com , Anda tidak perlu melakukan apa pun. Cukup sertakan dua baris skrip di halaman Anda.Tampaknya
window.onerror
tidak memberikan akses ke semua kemungkinan kesalahan. Secara khusus itu mengabaikan:<img>
memuat kesalahan (respons> = 400).<script>
memuat kesalahan (respons> = 400).window.onerror
dengan cara yang tidak diketahui (jquery, angular, dll.).Inilah awal skrip yang menangkap banyak kesalahan ini, sehingga Anda dapat menambahkan lebih banyak debugging yang kuat ke aplikasi Anda selama pengembangan.
Ini bisa digunakan seperti ini:
Script lengkap memiliki implementasi default yang mencoba untuk mencetak versi "display" semi-readable dari entitas / kesalahan yang diterimanya. Dapat digunakan untuk inspirasi bagi penangan kesalahan khusus aplikasi. Implementasi default juga menyimpan referensi ke 100 entitas kesalahan terakhir, sehingga Anda dapat memeriksanya di konsol web setelah terjadi seperti:
Catatan: Ini berfungsi dengan mengganti metode pada beberapa peramban / konstruktor asli. Ini dapat memiliki efek samping yang tidak diinginkan. Namun, telah berguna untuk digunakan selama pengembangan, untuk mencari tahu di mana kesalahan terjadi, untuk mengirim log ke layanan seperti NewRelic atau Sentry selama pengembangan sehingga kami dapat mengukur kesalahan selama pengembangan, dan pada pementasan sehingga kami dapat men-debug apa yang sedang terjadi di tingkat yang lebih dalam. Kemudian dapat dimatikan dalam produksi.
Semoga ini membantu.
sumber
sumber
Seseorang harus mempertahankan callback onerror sebelumnya terkait juga
sumber
Jika Anda ingin cara terpadu untuk menangani kesalahan yang tidak tertangkap dan penolakan janji yang tidak ditangani, Anda dapat melihat di perpustakaan yang tidak tertangkap .
EDIT
Itu mendengarkan jendela. penolakan unhandled selain window.onerror.
sumber
Saya akan merekomendasikan mencoba Trackjs .
Galat saat masuk sebagai layanan.
Sangat sederhana untuk diatur. Cukup tambahkan satu baris <script> ke setiap halaman dan hanya itu. Ini juga berarti akan sangat mudah untuk dihapus jika Anda memutuskan tidak menyukainya.
Ada layanan lain seperti Sentry (yang merupakan open-source jika Anda dapat meng-host server Anda sendiri), tetapi tidak melakukan apa yang Trackjs lakukan. Trackjs merekam interaksi pengguna antara browser mereka dan server web Anda sehingga Anda benar-benar dapat melacak langkah-langkah pengguna yang menyebabkan kesalahan, bukan hanya referensi file dan nomor baris (dan mungkin stack trace).
sumber
Anda mendengarkan acara onerror dengan menetapkan fungsi ke window.onerror:
sumber