Прекратить подавление ошибок JavaScript
Я использую Firebug для просмотра ошибок JavaScript. Но я также использую jQuery. По какой-то причине я никогда не вижу ошибок JavaScript при использовании jQuery, и это одна из самых больших проблем с работой с jQuery в первую очередь.
Нет конкретного кода для показа, просто представьте alert(areareg);
, где areareg
есть undefined или любая ошибка JavaScript, и Firebug не расскажет мне об этом. JavaScript будет просто терпеть неудачу без предупреждения или уведомления любого рода. Это всегда так, в любом проекте, где я использовал jQuery, и это единственная причина, по которой мне не нравится jQuery; потому что его, как известно, трудно отлаживать, когда что-то идет не так.
По какой-то причине мне даже не удалось найти этот вопрос, поднятый в Интернете, не говоря уже о том, что он ответил. Но я решил, что я попробую здесь:
- Есть ли способ заставить jQuery остановить подавление сообщений об ошибках?
- Я единственный в мире, у которого всегда была эта проблема с jQuery?
EDIT:
Я использую Firefox (с Firebug) и Chrome, и я использую только неминифицированную версию jQuery. Тем не менее, я никогда в жизни не видел сообщения об ошибке jQuery любого типа, ни полезные, ни бесполезные, ни на самом деле обычные ошибки JavaScript при использовании jQuery.
Ответы
Ответ 1
Я использую google Chrome для моей отладки, и это довольно хорошо, оно также показывает все ошибки jquery (как сказал Альфред, если вы используете сокращенную версию, вы не получите никакого значимого имени в своих ошибках, поэтому лучше использовать исходный источник)
Ответ 2
Хорошо, несмотря на ваше впечатление, jQuery сам не делает ничего, чтобы "подавлять" сообщения об ошибках. Теперь Firefox делает, как правило, отбрасывает определенные виды исключений, особенно как то, что вы описываете. Я часто нахожу, что обертывание целого блока Javascript в try ... catch
с вызовом предупреждения, если исключение произойдет, - это полезный способ справиться с этим, но он все еще раздражает.
Ответ 3
У меня такая же проблема в FF 18. Я использую JSF и JQuery, хотя это происходит даже для простого JS-кода на странице. Я намеренно помещаю javascript-код, который должен вызывать синтаксическую ошибку без слова в Firebug. FF 18 имеет встроенную консоль, похожую на Firebug. Когда я отключил плагин firebug, появились сообщения console.log. Однако ошибки все еще не отображаются. Я просто попробовал Chrome, и там появились ошибки.
Ответ 4
Я сталкивался с этой проблемой несколько раз. Это довольно непоследовательно и трудно реплицировать, иногда это похоже на проблемы с версией. Настройки редко, похоже, имеют значение, хотя иногда и "Break on next" (не всегда) идентифицируют ошибки, которые в противном случае проскальзывают.
Одна вещь, которую я заметил, это, как правило, для кода, который запускается внутри функции обратного вызова, например. от события пользовательского интерфейса или от вызова AJAX. Иногда Firefox/Firebug будет вести себя как другие браузеры и показывать ошибки в консоли, иногда он ничего не дает даже для невероятно четких случаев, таких как:
console.log('something'); // Shows up in console fine
fail // Other browsers give undefined variable error, Firefox gives nothing
console.log('something else'); // Never reached, so silent error clearly happens
Лучший подход, который я нашел к этому:
-
После того, как вы обнаружили ошибку отсутствия показа, вернитесь с помощью console.trace()
, пока не дойдете до точки, где внутри функции, ошибка скрыта, снаружи, она показывает, добавляет некоторый фрагмент кода, например:
console.trace();
fail // cause the error, look out for a trace followed by nothing
-
Если это вызов AJAX, вручную добавьте основной обработчик ошибок, потому что по какой-либо причине Firefox/Firebug теряет значение по умолчанию:
$.ajax({
error: function(a,b,c){
throw c;
},
other: '...settings'
}
- Если это что-то, вы не можете добавить функцию обработки ошибок, оберните ее в try... catch, например:
try {
// whatever the code is within which there are no errors
} catch( err ){
throw err;
}
Этого должно быть достаточно, чтобы поймать все ошибки там, где они находятся в пределах области, где Firefox их теряет. Остерегайтесь случаев, когда у вас есть обратный вызов в обратном вызове, хотя вам может понадобиться сделать это дважды...