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.
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ż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.
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.
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
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
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