Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get error event details in Firefox using addEventListener?

I'm trying to understand why Firefox (I'm using 15 but it's the same even in nightly) is not behaving like WebKit when trying to access error event information.

This one works everywhere:

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

But of course I don't want to use this.

The right thing to do is:

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

Unfortunately this one only works in WebKit. In Firefox the handler is called, but the e event is almost empty: no message, no line number, no filename properties.

The very minimal test is here: http://jsbin.com/efexiw/1/edit

I don't think this is a bug, though... so the question is: how do I get the error details in recent Firefox?

like image 424
Claudio Avatar asked Oct 05 '12 12:10

Claudio


People also ask

Is error an event?

The error event is fired on an Element object when a resource failed to load, or can't be used. For example, if a script has an execution error or an image can't be found or is invalid. This event is not cancelable and does not bubble.

How do you check if an element has an event listener?

Right-click on the search icon button and choose “inspect” to open the Chrome developer tools. Once the dev tools are open, switch to the “Event Listeners” tab and you will see all the event listeners bound to the element. You can expand any event listener by clicking the right-pointing arrowhead.

What does addEventListener return?

JavaScript Document own method: addEventListener()It does not return any value.

What is an Eventlistener?

An event listener is a procedure or function in a computer program that waits for an event to occur. Examples of an event are the user clicking or moving the mouse, pressing a key on the keyboard, disk I/O, network activity, or an internal timer or interrupt.


1 Answers

The HTML5 specification requires that a parse failure causes the browser to:

...report the error for script, with the problematic position (line number and column number), using the global object... as the target.

Where "report the error" includes the steps

  1. Let message be a user-agent-defined string describing the error in a helpful manner.

...

  1. Let event be a new trusted ErrorEvent object that does not bubble but is cancelable, and which has the event name error.

  2. Initialize event's message attribute to message.

...

  1. Dispatch event at target.

Thus, any HTML5-compliant browser will report parse-time error events on window, which include a message attribute set to a "user-agent-defined string describing the error in a helpful manner." Any browser version that fails to do this is not yet HTML5 compliant in this regard.


Previously (at the time this question was written), window.onerror gave information that was not provided by window.addEventListener("error"). If you must use an old version of Firefox, you can safely use window.onerror:

// Example 1:

// Prevent error dialogs from displaying -which is the window's 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;
}
like image 196
apsillers Avatar answered Sep 19 '22 15:09

apsillers