2013-06-12 3 views
4

Мне нужно уловить один тип ошибок, который может произойти во множестве разных страниц/скриптов и выполнять пользовательскую логику при возникновении этой ошибки. Я планировал использоватьНеверный обработчик исключений/формат window.onerror msg

window.onerror = function (msg, url, line) { 
    if ({{my specific error happened}}){ 
     {{do some custom work}}; 
     return true; 
    } 
    //do nothing and let the browser notify the user of all the other errors 
} 

так где-то я могу сделать throw {{my specific error}} и поймать его в window.onerror. Я попробовал throw "Magic";, но затем в window.onerror Получаю msg == "Uncaught Magic". Будет ли это «Нечищено» часть msg всегда предшествует моей брошенной строке? Могу ли я полагаться на него, чтобы обнаружить мою конкретную ошибку? Или есть какой-либо другой механизм для обнаружения типа ошибки в window.onerror?
Мне нужен он только для работы в Chromium.

+4

Я понимаю, что не помогаю на все ... но «Uncaught Magic» - самое смешное исключение, которое я когда-либо видел. :-) –

ответ

3

Некоторые браузеры передают фактический объект ошибки. Не знаете, какие браузеры поддерживают это. Here говорят, что требуется Gecko 31. Не знаю, как хром и другие.

Вы можете создать пользовательскую ошибку, как:

Magic = function(message) { 
    this.name = 'Magic'; 
    this.message = message; 
} 
Magic.prototype = new Error(); 
Magic.prototype.constructor = Magic; 

бросить его где-нибудь:

throw new Magic('Kaboom'); 

и поймать его в window.onerror, как это:

window.onerror = function (message, filename, lineno, colno, error){ 
    if (error !== undefined && error.hasOwnProperty("name") && error.name == "Magic"){ 
     alert("some uncaught magic caused: " + message +" - in "+filename +"("+lineno+")"); 
     return true; 
    } 
} 

проверка на fiddle **


вы также можете проверить, содержит ли сообщение «Магия», но тогда вы можете случайно поймать другие ошибки, содержащие «Магию».


пс: жаль некро, я наткнулся на этом поиск по тому же .. так что я думал, что я мог бы также добавить ответ ..

Смежные вопросы