Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2014, 09:51
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

генерация и логирование ошибки
Кто знаком с php, тот знает, что там есть замечательная функция trigger_error('my error'). Функция генерирует пользовательскую ошибку: E_USER_NOTICE/WARNING/ERROR.
Если определен собственный обработчик ошибок, то все это вместе позволяет в удобном виде логировать ошибки скрипта, а также свои ошибки. Например
<?php
if(/* что-то пошло не так */){
    trigger_error('текст ошибки');
}
?>

В обработчике ошибок ловим саму ошибку, имя файла и номер строки, где произошла ошибка. Ну и там же доступен контекст и трассировка.
При генерации такой ошибки скрипт не останавливается - это не исключение.

На js я переопределил window.onerror и написал функцию логирования ошибок на сервере. Так вот интересует вопрос, как в js реализовать аналог trigger_error из php.
То есть чтобы можно было сгенерировать ошибку, но не останавливать выполнение. А в обработчике ошибок хотелось бы помимо текста ошибки узнать файл и номер строки, где произошла ошибка. Ну и естественно при генерации ошибки хочется указать только текст ошибки, а передачу имени файла и номера строки возложить на плечи функции.

Как бы такое сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2014, 10:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 12,781

Сообщение от Hapson
Как бы такое сделать?
Все, что есть...
http://javascript.ru/try-catch
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2014, 10:47
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от ksa Посмотреть сообщение
Все, что есть...
http://javascript.ru/try-catch
Некошерно оборачивать каждую генерацию ошибки в try...catch.
Я думаю, что нужно как-то унаследовать стандартный Error, но чтобы номер строки и файл были приведены к единому виду независимо от браузера.
И тогда можно будет просто делать
triggerError(new UserError('текст ошибки'));
Ответить с цитированием
  #4 (permalink)  
Старый 03.04.2014, 10:58
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Есть некроссбраузерный вариант:
alert(  (new Error).stack  )
Ответить с цитированием
  #5 (permalink)  
Старый 03.04.2014, 11:06
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Sweet
Есть некроссбраузерный вариант:
В том-то и дело, что не кроссбраузерный.
В FF есть lineNumber и fileName, в IE теже свойства зовутся иначе, в хроме вообще непонятно что. А еще ведь есть куча браузеров...
window.onerror ведь ловит файл и строку. Вот нужно тоже самое, только без генерации реальной ошибки, которая остановит скрипт. Нужно кроссбраузерно получить файл и строку, где был создан объект Error
Ответить с цитированием
  #6 (permalink)  
Старый 03.04.2014, 11:58
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Думал прокатит, но чот нигде не заработало, хотя CustomEvent нормально диспатчится, а ErrorEvent не хочет
window.addEventListener("error", function (event) {
	console.log(event);
});

function triggerError(error) {
	var event = new ErrorEvent(error.message, {
		lineno: error.lineNumber,
		filename: error.fileName
	});
	window.dispatchEvent(event);
}

triggerError(new Error("test error"));
Ответить с цитированием
  #7 (permalink)  
Старый 03.04.2014, 12:27
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 822

в случае ошибки на клиенте скрипт не перестает работать, а консоль браузера вывалит ошибку. Там вам и текст ошибки и файл и номер строки - все есть.

Вам этой информации недостаточно или я чего-то не понимаю?
Ответить с цитированием
  #8 (permalink)  
Старый 03.04.2014, 12:46
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

Сообщение от dmitry111 Посмотреть сообщение
в случае ошибки на клиенте скрипт не перестает работать
смотря какие ошибки
Ответить с цитированием
  #9 (permalink)  
Старый 03.04.2014, 12:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

dmitry111, он же php'шник, он наверно и не знает что в браузерах встрена консоль ошибок )

Мне ее как раз и не хватает при работе с сервером. Есть конечно и для серверов отладчики, но они какие-то кривые.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 03.04.2014, 12:54
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 822

Сообщение от nice_try
смотря какие ошибки
речь о том, что процесс не падает, в отличии от сервера
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки при асинхронных AJAX запросах San4ezy Общие вопросы Javascript 4 27.03.2014 20:48
Что за ошибки в скриптах на сайте? razorg1991 Ваши сайты и скрипты 4 30.08.2013 13:37
Генерация поля из 8000 картинок на стороне клиента VS генерация картинки на сервере xintrea Events/DOM/Window 2 25.06.2013 20:10
Определить код ошибки. crot26rus jQuery 2 15.07.2011 15:32
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17