2013-07-16 5 views
30

Ausnahmen/Fehler in vielen anderen Programmiersprachen (zB Java, Ruby) liefern immer Stacktrace/Backtrace-Informationen.Wann werden richtige Stack-Traces für die window.onError-Funktion bereitgestellt?

In JavaScript unbehandelt Fehler werden von window.onError abgefangen.

Obwohl diese Funktion das Error-Objekt nicht erhält, haben wir keinen Zugriff auf die Stack-Eigenschaft des Objekts.

Gibt es eine zuverlässige Quelle für Informationen über , wenn gibt es Änderungen daran?

+0

hoffentlich nie, das ist ein großes Sicherheitsproblem. – dandavis

+4

@dandavis Wie wäre es ein Sicherheitsproblem? Der Benutzer kann den ganzen Tag mit JavaScript-Tools in JavaScript-Code eingeben. Mit ausreichendem Aufwand konnten sie den Stack-Trace – Kip

+0

erhalten, denn wenn vollständige Fehler gemeldet wurden, konnten Sie eine HTML-Seite als Skript [src] laden, und die Fehlermeldung würde den HTML-Inhalt in der Syntaxfehler-Meldung widerspiegeln und die SOP verletzen. – dandavis

Antwort

10

Es scheint, dass das Fehlerobjekt selbst der fünfte Parameter sein wird, der onerror geliefert wird. http://html5.org/tools/web-apps-tracker?from=8085&to=8086
http://www.whatwg.org/specs/web-apps/current-work/ - Abschnitt 7.1.6.1

+1

Diese in allen Browsern nicht wahr ist. IE10 kehrt args als errormessage, SKRIPT_DATEI, scriptLineNumber, scriptColumnNumber – Kip

+1

Nach [http://msdn.microsoft.com/en-us/library/ie/cc197053.aspx](http://msdn.microsoft.com/en- us/library/ie/cc197053.aspx) (letzte Aktualisierung 22.07.2013) Was Sie sagen, ist nicht wahr. Können Sie bitte eine Dokumentation vorlegen, die das sagt? –

+1

Die Dokumentation sagt nicht, dass es ein viertes Argument gibt. Aber wenn Sie es tatsächlich versuchen (versuchen Sie es einfach, ich habe es gestern versucht), sehen Sie, dass der vierte Arg die Spaltennummer ist. kann es ein nicht dokumentiert „Feature“, die nicht den Normen nicht entsprechen, aber es hat auf jeden Fall wieder nicht das ursprüngliche Objekt Fehler – Kip

34

das Fehlerobjekt, das eine "hygienisiert" stack trace enthalten würde, die nun als der fünfte Parameter zu onerror in Chrome eingeleitet wird. Sie können hier darüber lesen: https://code.google.com/p/chromium/issues/detail?id=147127

Zum Zeitpunkt dieses Schreibens ist es in Canary und sollte irgendwann in diesem Monat auf die stabile Chrome-Version geschoben werden. Wenn Sie Canary laufen können Sie es wie so testen:

window.onerror = function (message, file, line, column, errorObj) { 
    if(errorObj !== undefined) //so it won't blow up in the rest of the browsers 
     console.log('Error: ' + errorObj.stack); 
} 

Sie gemäß der Spezifikation sehen, die sie haben auch die Spaltennummer hinzugefügt, die IE 10 auch umgesetzt hat.

Sie können auch die Mozilla Diskussion Kasse: https://bugzilla.mozilla.org/show_bug.cgi?id=355430

+0

Scheint auch in Firefox zu funktionieren, mit v34.0.5. –