Gibt es eine Möglichkeit, jede Funktion in Javascript try-catch hinzuzufügen?

8

Für die Fehlerberichterstattung möchte ich einen Try-Catch-Wrapper um den Code jeder Funktion einfügen, die ich habe.

Also im Grunde möchte ich

ersetzen %Vor%

... mit ...

%Vor%

Gibt es eine Möglichkeit, diese generische Try-Catch-Funktion auf alle Funktionen anzuwenden, ohne sie manuell zu bearbeiten? Zum Beispiel durch Ändern des Prototyps des Function-Objekts?

BEARBEITEN

Warum ich alle meine Funktionen ausprobieren möchte: Ich erstelle eine HTML5-App, die ich auf iOS und Android veröffentliche. Ich kann von meinem gegenwärtigen rudimentären Javascript Fehler berichten, dass, obwohl die App gut auf meinem eigenen Gerät läuft, Fehler auf einigen anderen Geräten auftreten.

Mein Ziel ist ein zweifaches: Wann immer ein Javascript Fehler auf jemandes Gerät auftritt ...

  1. Ich möchte den Benutzer darüber informieren, dass die App möglicherweise nicht einwandfrei funktioniert
  2. Ich möchte grob wissen, wo der Fehler aufgetreten ist, damit ich weiß, wo ich nach dem Problem suchen soll
Wytze 31.07.2012, 14:08
quelle

4 Antworten

10

Dies ist nicht einfach, da es keine Möglichkeit gibt, alle JavaScript-Funktionen zu finden, die überall definiert sind. Zum Beispiel würde ein solcher Ansatz wahrscheinlich Callback-Funktionen vermissen, die zur Laufzeit definiert sind.

Wahrscheinlich möchten Sie auch nicht alle Funktionen umbrechen, da dies Browserfunktionen und Funktionen von JavaScript-Bibliotheken einschließen würde, die Sie sicher nicht umbrechen möchten.

Ein viel besserer Ansatz ist wahrscheinlich, eine Funktion zu definieren, die eine andere Funktion umschließt:

%Vor%

Jetzt können Sie diese Funktion verwenden, um alles zu dekorieren, was Sie möchten. Wrapping wird einfacher, wenn Sie Namensräume verwenden:

%Vor%

Geben Sie einfach alle Funktionen in einen speziellen Namespace ein und durchlaufen Sie dann den Namespace:

%Vor%     
Aaron Digulla 02.08.2012, 09:45
quelle
1

Okay, ich habe es anscheinend hier gefunden: Ссылка

Grundsätzlich werden alle Funktionen durch einen try-catch-Wrapper mit der ursprünglichen Funktion im try-Teil ersetzt.

    
Wytze 31.07.2012 14:11
quelle
0

Ich musste etwas Code verbessern, also schrieb ich eine Funktion namens fortify und legte sie in ein NPM-Modul. Es ist ein work in progress, aber es sollte helfen.

Ссылка

Bonus : Es funktioniert mit asynchronen Funktionen. Feedback willkommen

    
GantMan 01.12.2017 02:44
quelle
-3

Ich frage mich (das ist reine Spekulation, also nicht sicher, ob das funktionieren würde), Sie könnten so etwas tun:

%Vor%

Auch dies ist reine Spekulation und ich habe es nicht getestet, aber wenn es überhaupt möglich ist, denke ich, dass der Schlüssel in der eval Aussage liegt.

    
Paul Aldred-Bann 31.07.2012 14:13
quelle