سؤال

أنا أتطلع إلى تسجيل استثناءات 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. سيتيح لك ذلك القيام بشيء ما عند اكتشاف خطأ ، لكن ربما لن يسمح لك بالاستمرار بطريقة رشيقة ستحصل عليها كتلة المحاولة. كن على علم بأنها بلا شك اختلافات بين المتصفحات في كيفية التعامل مع هذا.

نصائح أخرى

تحقق من هذا الكمان:

http://jsfiddle.net/xrysra/1/

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 أفضل على أي حال وتوفر دلالات أكثر ثراءً.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top