console.log() wiederherstellen

Lesezeit: 5 Minuten

Benutzeravatar von s3v3n
s3v3n

Aus irgendeinem Grund ist das Prototyp-Framework (oder ein anderer JavaScript-Code) im Lieferumfang enthalten Magento ersetzt Standardkonsolenfunktionen, daher kann ich nichts debuggen. Aufschreiben in der JavaScript-Konsole console Ich erhalte folgende Ausgabe:

> console
Object
assert: function () {}
count: function () {}
debug: function () {}
dir: function () {}
dirxml: function () {}
error: function () {}
group: function () {}
groupEnd: function () {}
info: function () {}
log: function () {}
profile: function () {}
profileEnd: function () {}
time: function () {}
timeEnd: function () {}
trace: function () {}
warn: function () {}

Ich benutze Google Chrome version 13.0.782.112 unter Linux.

Prototype JavaScript framework, version 1.6.0.3

Gibt es eine schnelle Möglichkeit, das Problem zu lösen?

  • Schauen Sie sich stackoverflow.com/questions/7081433/… an.

    – Reto Aebersold

    17. August 2011 um 7:56

  • Offenbar gibt es diesbezüglich ein offenes Problem mit Magento: magentocommerce.com/bug-tracking/issue/?issue=11312

    – RoccoC5

    17. August 2011 um 8:09

  • Ja, anscheinend habe ich dieses Problem, aber ich habe nicht vor, den Magento-Code zu ändern, und für Entwickler bin ich mit der akzeptierten Lösung einverstanden.

    – s3v3n

    17. August 2011 um 8:13

Grzegorz Rożnieckis Benutzeravatar
Grzegorz Rożniecki

Versuchen Sie eine Wiederherstellung, da sich die ursprüngliche Konsole im window.console-Objekt befindet window.console aus iframe:

var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window.console = i.contentWindow.console;
// with Chrome 60+ don't remove the child node
// i.parentNode.removeChild(i);

Funktioniert bei mir auf Chrome 14.

  • An jeden, der dies nutzen wird: Bitte Denken Sie daran, hinter sich aufzuräumen. Auch bekannt als: i.parentNode.removeChild(i);

    – Seth Holladay

    23. Mai 2014 um 15:38


  • Diese Antwort funktioniert tatsächlich in aktuellen Versionen von Chrome (52+), während dies bei der akzeptierten Antwort nicht der Fall ist.

    – SB

    8. August 2016 um 9:29

  • Das ist die kreativste Antwort, die ich je gesehen habe! Danke schön.

    – Sedran

    5. Dezember 2016 um 13:47 Uhr

  • Ich verwende Chrome 63 (Canary) und diese Antwort funktioniert, aber nur ohne die Zeile i.parentNode.removeChild(i);.

    – Vortexfünf

    21. September 2017 um 14:51 Uhr

  • Reinigen Sie nur nach sich selbst nach Sie haben die Konsole nicht mehr benutzt! Ohne Kind geht es nicht richtig.

    – Jānis Elmeris

    7. Mai 2018 um 7:51

Benutzeravatar von pimvdb
pimvdb

Zum Beispiel,

delete console.log

würde auch wiederherstellen console.log:

console.log = null;
console.log;         // null

delete console.log;
console.log;         // function log() { [native code] }

  • Ja! Das ist noch besser! Deshalb liebe ich Stackoverflow 😀

    – s3v3n

    17. August 2011 um 8:17 Uhr

  • versuchen delete window.console Stattdessen funktioniert das bei mir in Chrome 30.x;

    – OneOfOne

    19. September 2013 um 22:45 Uhr

  • Funktioniert nicht mehr in Chrome 52. Kann zum Beispiel auf Twitter getestet werden: console.log -> function() {}Wenn Sie entweder console.log oder window.console.log löschen, wird es lediglich entfernt, ohne dass das ursprüngliche Verhalten wiederhergestellt wird.

    – SB

    8. August 2016 um 9:26 Uhr

  • Kann das bestätigen… es funktioniert nicht in neuerem Chrome. Ich arbeite an der Erweiterung von owncloud und sie haben console.log entfernt (WTF?)

    – MilMike

    5. September 2016 um 14:18

  • Hier ist ein Trick, der helfen könnte, wenn Chrome bei der Verwendung die native Protokollfunktion nicht wiederherstellt delete console.log… Wenn Sie bereit sind, TamperMonkey zu installieren (oder bereits haben), dann brauchen Sie nur ein einfaches Skript … setTimeout(() => { unsafeWindow.console = window.console; }, 2000); Tampermonkey-Skripte erhalten eine eigene Kopie von a window Sie müssen also lediglich das ursprüngliche Konsolenobjekt nach einer Verzögerung wiederherstellen. Bei Bedarf anpassen… (Stellen Sie sicher, dass Sie die Standardeinstellung entfernen // @grant none).

    – Michael Bray

    16. August 2018 um 4:49


Magento enthält den folgenden Code /js/varien/js.js – Kommentieren Sie es aus und es wird funktionieren.

if (!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

Nur für den Fall, dass jemand mit der gleichen Situation konfrontiert ist.
Ich habe nicht auf die ursprüngliche Antwort zu Xaerxess geantwortet, weil ich dafür nicht den nötigen Ruf habe.
Sieht so aus, als wäre das die richtige Antwort, aber aus irgendeinem Grund fällt mir auf, dass es manchmal in meiner Software funktioniert und manchmal nicht …

Also habe ich versucht, den Löschvorgang abzuschließen, bevor ich das Skript ausgeführt habe, und es sieht so aus, als ob in 100 % der Fälle alles einwandfrei funktioniert.

if (!("console" in window) || !("firebug" in console))
{

  console.log = null;
  console.log;         // null

  delete console.log;

  // Original by Xaerxess
  var i = document.createElement('iframe');
  i.style.display = 'none';
  document.body.appendChild(i);
  window.console = i.contentWindow.console;

}

Vielen Dank an alle.

Givenkoas Benutzer-Avatar
Givenkoa

delete window.console stellt das Original wieder her console Objekt in Firefox und Chrome.

Wie funktioniert das? window ist ein gehostetes Objekt und wird normalerweise mit einem gemeinsamen Prototyp zwischen allen Instanzen implementiert (Sie haben viele Registerkarten im Browser).

Einige dumme Entwickler externer Bibliotheken/Frameworks (bzw Feuerkäferusw.) überschreiben die Eigenschaftskonsole von window Instanz, aber es beschädigt nicht window.prototype. Bis zum delete Betreiber, von dem aus wir zurücksenden console.* Methoden zum Prototyping von Code.

function restoreConsole() {
  // Create an iframe for start a new console session
  var iframe = document.createElement('iframe');
  // Hide iframe
  iframe.style.display = 'none';
  // Inject iframe on body document
  document.body.appendChild(iframe);
  // Reassign the global variable console with the new console session of the iframe 
  console = iframe.contentWindow.console;
  window.console = console;
  // Don't remove the iframe or console session will be closed
}

Getestet auf Chrome 71 und Firefox 65

Benutzeravatar von Russ Cam
Russ Cam

Speichern Sie einen Verweis auf das Original console in einer Variablen ganz am Anfang des Skripts einfügen und dann entweder diese Referenz verwenden oder neu definieren console um auf den erfassten Wert zu zeigen.

Beispiel:

var c = window.console;

window.console = {
    log :function(str) {
        alert(str);
    }
}

// alerts hello
console.log("hello");

// logs to the console
c.log("hello");

  • Natürlich könnte ich es tun, indem ich kurz vor allem etwas JS einfüge, und ich bin mir sicher, dass diese Lösung funktioniert, aber ich wollte eine schnelle Möglichkeit, das Problem zu lösen. trotzdem danke

    – s3v3n

    17. August 2011 um 8:10 Uhr

1451640cookie-checkconsole.log() wiederherstellen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy