2012-10-05 17 views
11

Próbuję zrozumieć, dlaczego Firefox (używam 15, ale jest taki sam, nawet w nocy) nie zachowuje się jak WebKit podczas próby uzyskania dostępu do informacji o zdarzeniach związanych z błędami.Jak uzyskać szczegółowe informacje o zdarzeniach związanych z błędami w Firefoksie za pomocą metody addEventListener?

Ten działa wszędzie:

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

Ale oczywiście nie chcę, aby to wykorzystać.

Prawo rzeczą do zrobienia jest:

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

Niestety ten działa tylko w WebKit. W przeglądarce Firefox wywoływana jest procedura obsługi, ale zdarzenie e jest prawie puste: brak komunikatu, brak numeru wiersza, brak właściwości pliku.

Bardzo minimalny test jest tutaj: http://jsbin.com/efexiw/1/edit

Nie sądzę, jest to problem, choć ... więc pytanie brzmi: w jaki sposób mogę uzyskać szczegółowe informacje o błędach w ostatnich Firefox?

Odpowiedz

23

HTML5 specification requires że awaria parse powoduje, że przeglądarka:

... zgłoś błąd w skrypcie, z problematycznej pozycji (numer wiersza i numer kolumny), stosując jako globalnego obiektu ... cel.

Gdzie "report the error" obejmuje etapy

  1. Niech wiadomość być User-agent zdefiniowane ciąg opisujący błąd w pomocny sposób.

...

  1. Niech wydarzenie być nowa witryna ErrorEvent obiekt, który nie robi bańkę, ale można anulować, i który ma nazwę zdarzenia error.

  2. Inicjowanie zdarzeń „s message przypisują wiadomości.

...

  1. Wysłanie zdarzeń na cel.

Zatem każda przeglądarka HTML5 zgodny będzie raportować zdarzenia błędów parse czasie na window, które zawierają atrybut message ustawiony na "agenta użytkownika określonej ciąg opisujący błąd w pomocny sposób. "Każda wersja przeglądarki, która tego nie robi, nie jest jeszcze zgodna z HTML5 pod tym względem.


Wcześniej (w czasie kwestia ta została napisana), window.onerror podał informację, że nie został dostarczony przez window.addEventListener("error"). Jeśli trzeba użyć starą wersję Firefoksa, można 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; 
} 
+0

Akceptuję odpowiedź bo przynajmniej wiem, jak poradzić sobie z sytuacją. Szkoda, że ​​nie rozumiem, dlaczego Firefox _susuje_ usunąć tę "cechę" (bo to, co czytałem w moich poszukiwaniach, to stare przykłady, które powinny działać w FF i innych przeglądarkach). – Claudio

+0

W FF 38, co najmniej, prawdopodobnie znacznie wcześniej, zdarzenie błędu dostarczone do addEventListener ma co najmniej komunikat, nazwę pliku i właściwości lnu ... może więcej. Obecnie szukam więcej i każdego standardu, który definiuje konkret. – Victoria

+0

Brakuje szczegółów dotyczących zdarzenia błędu, ale [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent) pokazuje, że dostępne jest .colno, a eksperymentacja mówi, że .error.stack jest dostępny w FF38. – Victoria

Powiązane problemy