Подтвердить что ты не робот

Как получить информацию об ошибке в Firefox с помощью addEventListener?

Я пытаюсь понять, почему Firefox (я использую 15, но это то же самое даже в ночное время) не ведет себя как WebKit при попытке получить доступ к информации о событиях ошибок.

Это работает везде:

window.onerror = function(message, lineno, filename) { }

Но, конечно, я не хочу использовать это.

Правильная вещь:

window.addEventListener('error', function(e) { 
  console.log(e.message);
}, false);

К сожалению, это работает только в WebKit. В Firefox вызывается обработчик, но событие e почти пусто: нет сообщения, номера строки, нет свойств имени файла.

Самый минимальный тест здесь: http://jsbin.com/efexiw/1/edit

Я не думаю, что это ошибка, хотя... так что вопрос: как мне получить информацию об ошибках в недавнем Firefox?

4b9b3361

Ответ 1

спецификация HTML5 требует, чтобы ошибка синтаксического анализа заставляла браузер:

... сообщите об ошибке для script, с проблемной позицией (номер строки и номер столбца), используя глобальный объект... как цель.

Где " сообщить об ошибке" включает в себя шаги

  1. Пусть сообщение представляет собой строку, определяющую пользовательский агент, описывающую ошибку полезным образом.

...

  1. Пусть событие будет новым доверенным объектом ErrorEvent, который не пузырится, но может быть отменен и имеет имя события error.

  2. Инициализировать атрибут события message для сообщения.

...

  1. Событие отправки в цель.

Таким образом, любой браузер, совместимый с HTML5, будет сообщать о событиях времени синтаксического разбора на window, которые включают атрибут message, установленный в строку, определенную пользователем, определяющую ошибку в полезной манере. " Любая версия браузера, которая этого не делает, еще не совместима с HTML5 в этом отношении.


Ранее (на момент написания этого вопроса) window.onerror предоставил информацию, которая не была предоставлена ​​window.addEventListener("error"). Если вы должны использовать старую версию Firefox, безопасно использовать window.onerror:

// Example 1:

// Prevent error dialogs from displaying -which is the window normal
// behavior- by overriding the default event handler for error events that
// go to the window.
window.onerror = null;

// Example 2:

var gOldOnError = window.onerror;
// Override previous handler.
window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
  if (gOldOnError)
    // Call previous handler.
    return gOldOnError(errorMsg, url, lineNumber);

  // Just let default handler run.
  return false;
}