2016-03-28 4 views
0

Ich arbeite mit einer sehr begrenzten Web-Plattform, die von Drittanbieter-Javascript-Bibliotheken Gebrauch macht. Ohne die überflüssigen Details, wie und warum es so funktioniert, aufzulisten, bin ich neugierig, ob es möglich ist, etwas/irgendetwas zu tun (z. B. die Ausführung der Javascript-Funktion), nachdem ein bestimmter console.log-Eintrag erscheint. Das System ist sehr eingeschränkt, aber ich versuche, die allgemeine Benutzerfreundlichkeit der Anwendung zu verbessern.Ist es möglich, nach einem bestimmten console.log() - Eintrag eine Javascript-Funktion auszuführen?

Eine typische Konsolenprotokolleintrag aus dieser Javascript-Bibliothek sieht in der Regel wie folgt aus:

data access_token=XXXXXXXXXXXXXXXX&type_name=user&attributes=["uuid","displayName","email"] 

Googeln ergibt sich eine große Menge an unabhängige Ergebnisse. Ich fand dies das Überschreiben der console.log-Methode, aber das ist nicht mein Wunsch genähert: How to get the console.log content as string in JavaScript

Irgendwelche Ideen? Ich gehe davon aus, dass Sie den aktuellen Inhalt in ein Array oder eine Zeichenfolge konvertieren und für Ergebnisse analysieren.

+1

warum nicht zwingende console.log? –

+0

Das sieht so aus, als ob es die einzige Option wäre. Ich hatte nur gehofft, die console.log-Einträge für andere Entwickler auf diesem System zu belassen. Ich glaube, dass ich das tun kann, ohne die console.log() Einträge zu behindern, die sie möglicherweise eingerichtet haben. – sparecycle

Antwort

1

Sie können console.log() AND überschreiben und weiterhin auf der Konsole protokollieren, sodass Sie sowohl die Ausgabe erfassen als auch die Protokollierung beibehalten können.

Hier ist eine Art und Weise zu tun, dass:

var logEntries = []; 

(function(oldLog) { 

    console.log = function(arg) { 
     // captures only first argument to console.log() 
     // could be expanded to concatenate all entries 
     logEntries.push(arg.toString()); 

     // now call original console.log() with original arguments 
     return oldLog.apply(console, arguments); 
    }; 
})(console.log); 

So, nun zu einem bestimmten Zeitpunkt, das logEntries Variable wird ein akkumulierter Array von allem console.log() gesendet werden. Dies ist eine einfache Version, die keine Objekte erweitert oder Arrays aufzählt. Weitere Features in diesem Bereich könnten hinzugefügt werden, es scheint jedoch, dass Sie nur nach einer bestimmten Zeichenfolge suchen.

Sie können auch vor dem Hinzufügen zum Array logEntries eine beliebige Filterung hinzufügen, wenn Sie beispielsweise nur Objekte erfassen möchten, die "access_token" enthalten.


Wenn Sie nur wollen, um die Linien zu erfassen, die "access_token=" enthalten, dann könnten Sie den obigen Code wie folgt ändern:

var logEntries = []; 

(function(oldLog) { 

    console.log = function(arg) { 
     if (typeof arg === "string" && arg.indexOf("access_token=") !== -1) { 
      logEntries.push(arg); 
     } 

     // now call original console.log() with original arguments 
     return oldLog.apply(console, arguments); 
    }; 
})(console.log); 
+0

@sparecycle - Haben Sie eine Lösung für Ihr Problem gefunden? Wenn dies der Fall ist, markiere diese (oder eine andere Antwort) als deine ausgewählte Antwort, indem du das grüne Häkchen links neben der Antwort markierst und dies zeigt der Community, dass deine Frage beantwortet wurde und dir einige Reputationspunkte verdienen wird Sie haben mehr Privilegien im Laufe der Zeit hier. – jfriend00