هل تطلق JavaScript حدثًا لاستثناءات غير معلوم/غير معلوم؟
-
19-08-2019 - |
سؤال
أنا أتطلع إلى تسجيل استثناءات JavaScript غير المعروفة. هل هناك حدث يطلق النار عندما لا يتم القبض على استثناء؟ أنا أتطلع إلى التقاط الاستثناءات قبل أن تتسبب في أخطاء JavaScript في المتصفح ، لكنني أفضل عدم تشغيل طلبي بالكامل داخل تجربة/catch. سيكون موضع تقدير أي مساعدة. شكرًا!
تحديث: أشار TVanfosson إلى Onerror كاحتمال. إنه ليس جزءًا من المواصفات وهو متاح فقط في متصفحات IE أو Gecko.
للمزيد من المعلومات - http://books.google.com/books؟id=tkszhx-xkzyc&pg=pa386&lpg=pa386&dq=safari+onerror+javascript&source=web&ots=gqagbunjg&sig=ibctoqs0ah_eazsbwlga9
جدول دعم Onerror - http://www.quirksmode.org/dom/vents/error.html
وثائق موزيلا - https://developer.mozilla.org/en/dom/window.onerror
تقرير حشرة WebKit - https://bugs.webkit.org/show_bug.cgi؟id=8519
المحلول
حاول استخدام معالج onerror. مستندات من MDN. سيتيح لك ذلك القيام بشيء ما عند اكتشاف خطأ ، لكن ربما لن يسمح لك بالاستمرار بطريقة رشيقة ستحصل عليها كتلة المحاولة. كن على علم بأنها بلا شك اختلافات بين المتصفحات في كيفية التعامل مع هذا.
نصائح أخرى
تحقق من هذا الكمان:
window.onerror = function (msg, url, line) {
console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
return true; // same as preventDefault
};
window.addEventListener('error', function (evt) {
console.log("Caught[via 'error' event]: '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
console.log(evt); // has srcElement / target / etc
evt.preventDefault();
});
throw new Error("Hewwo world. I crash you!!!");
throw new Error("Hewwo world. I can only crash you once... :(");
الذي يطبع:
Caught[via window.onerror]: 'Uncaught Error: Hewwo world. I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21 Caught[via 'error' event]: 'Uncaught Error: Hewwo world. I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26 ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world. I crash you!!!", clipboardData: undefined, cancelBubble: false…} fiddle.jshell.net:27\
ملحوظات:
إذا قمت بإزالة خطوط "Return True" / "EVT.PreventDefault ()" ، فبعد تسجيل الدخول ، سيتم طباعة على وحدة التحكم JS بالطريقة العادية.
على عكس البيانات التي تم إجراؤها أعلاه ، عملت Window.Orror في جميع المتصفحات التي اختبرتها. ومع ذلك ، ربما تكون طريقة AddEventListener أفضل على أي حال وتوفر دلالات أكثر ثراءً.