Перехват throw в JS

241
20 января 2017, 09:35

Возникла задача написания кода, который перехватывал бы любые исключения и ошибки JS в браузере, в том числе, ошибки, сгенерированные вручную при помощи throw window.onerror на это, увы, не способен. Кто сталкивался с такой проблемой, или, может, знает, как её решить?

UPD:
Как оказалось, window.onerror перехватывает throw, но window.onerror можно перезаписать, что в моей ситуации если не неприемлемо, то крайне нежелательно. Поэтому изначально я планировал использовать для этой цели addEventListener, но, как назло, он, по всей видимости, не перехватывает throw. Может кто-то знает какие-то еще способы?

UPD: Прошу прощения у всех, кого побеспокоил за ложный вызов. Ситуация оказалась следущей: И window.onerror, и addEventListener успешно перехватывают throw, но только, когда они вызваны через глобальный код. Допустим, через onclick, или в теге <script>. Если же вызвать throw в консоли, то ничего не произойдет. Равно, как и если написать код с неправильным синтаксисом, или с вызовом неопределенной переменной или функции. С меня всем по плюсику, вопрос закрыт, всем спасибо!

Answer 1

Если я правильно понял -

window.addEventListener('error', event => { 
  console.log(`ошибка перехвачена: ${event.error.toString()}`); 
}); 
 
throw "some exception";

window.addEventListener('error', event => {  
  console.log(`ошибка перехвачена: ${event.error.toString()}`); 
}); 
 
notExistsProp.notExistsMethod();

И пример иллюстрирующий работу onerror -

window.onerror = function(errorMsg, url, lineNumber) { 
  console.log(`ошибка перехвачена: ${errorMsg}`); 
} 
 
throw "some exception";

READ ALSO
Событие закрытия вкладок плагина EasyTabs.js

Событие закрытия вкладок плагина EasyTabs.js

Подскажите пожалуйста, какое событие отвечает за закрытие вкладок ? Сам плагин https://osalfajango

281
Перенос и развертывание приложения с бд. express.js + mySql or mongodb.

Перенос и развертывание приложения с бд. express.js + mySql or mongodb.

Вопрос собственно тривиальный, однако как оказалось ответ для меня не очевиден

224
confirm JS sweetalert

confirm JS sweetalert

Здравствуйте

288
Как правильно загружать данные с backend&#39;a?

Как правильно загружать данные с backend'a?

У меня есть небольшая страница на AngularJSДля получения данных с backend'а я пользуюсь такой конструкцией:

234