s3v3n
Por alguna razón, el framework prototipo (u otro código JavaScript) que se envía con Magento está reemplazando las funciones estándar de la consola, por lo que no puedo depurar nada. Escribir en la consola de JavaScript console
Obtengo el siguiente resultado:
> 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 () {}
Estoy usando Google Chrome version 13.0.782.112
en Linux.
Prototype JavaScript framework, version 1.6.0.3
¿Hay una manera rápida de resolver esto?
Xerxess
Dado que la consola original está en el objeto window.console, intente restaurar window.console
de 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);
Funciona para mí en Chrome 14.
-
Para cualquiera que vaya a usar esto, por favor recuerden limpiar después de ustedes mismos. alias:
i.parentNode.removeChild(i);
– Seth Holladay
23 mayo 2014 a las 15:38
-
Esta respuesta realmente funciona en las versiones actuales de Chrome (52+), mientras que la respuesta aceptada no lo hace.
– SB
8 de agosto de 2016 a las 9:29
-
¡Esta es la respuesta más creativa que he visto! Gracias.
– sedrán
5 de diciembre de 2016 a las 13:47
-
@NickCoad Todavía funciona después del último
i.parentNode.removeChild(i)
¿no es así?– Xerxess
1 de agosto de 2017 a las 9:54
-
Estoy usando Chrome 63 (Canary) y esta respuesta funciona, pero solo sin la línea
i.parentNode.removeChild(i);
.– Vórtice cinco
21 de septiembre de 2017 a las 14:51
pimvdb
Por ejemplo,
delete console.log
también restauraría console.log
:
console.log = null;
console.log; // null
delete console.log;
console.log; // function log() { [native code] }
-
¡Sí! ¡Esto es aún mejor! Por eso me encanta stackoverflow 😀
– s3v3n
17 de agosto de 2011 a las 8:17
-
probar
delete window.console
en cambio, eso me funciona en Chrome 30.x;– Uno de uno
19/09/2013 a las 22:45
-
Ya no funciona en Chrome 52. Se puede probar en Twitter, por ejemplo:
console.log
->function() {}
eliminar console.log o window.console.log simplemente lo eliminará, sin restaurar el comportamiento original.– SB
8 de agosto de 2016 a las 9:26
-
puedo confirmar… no funciona en cromo más nuevo. Estoy trabajando para extender owncloud y eliminaron console.log (¿WTF?)
– MilMike
5 de septiembre de 2016 a las 14:18
-
Aquí hay un truco que podría ayudar a que Chrome no restaure la función de registro nativo cuando se usa
delete console.log
… Si está dispuesto a instalar (o ya tiene) TamperMonkey, entonces solo necesita un script simple…setTimeout(() => { unsafeWindow.console = window.console; }, 2000);
Los scripts de Tampermonkey obtienen su propia copia de unwindow
objeto, por lo que todo lo que necesita hacer es restaurar el objeto de la consola original después de un retraso. Modifique según sea necesario… (Asegúrese de eliminar el valor predeterminado// @grant none
).–Michael Bray
16 de agosto de 2018 a las 4:49
Magento tiene el siguiente código en /js/varien/js.js
– coméntalo y funcionará.
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() {}
}
Por si alguien se enfrenta a esta misma situación.
No respondí a la respuesta original de Xaerxess porque no tengo suficiente reputación para hacerlo.
Parece que esa es la respuesta correcta, pero por alguna razón me doy cuenta de que a veces funciona en mi software y otras no…
Así que intenté completar la eliminación antes de ejecutar el script y parece que todo funciona bien el 100% de las veces.
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;
}
Gracias a todos.
dadokoa
delete window.console
restaura el original console
objeto en Firefox y Chrome.
¿Como funciona esto? window
es un objeto alojado y normalmente se implementa con un prototipo común entre todas las instancias (tienes muchas pestañas en el navegador).
Algunos desarrolladores tontos de bibliotecas/marcos externos (o bicho de fuegoetc.) anulan la consola de propiedades del window
instancia, pero no corrompe window.prototype
. Por el delete
operador estamos de vuelta despachando desde el console.*
métodos para prototipo de código.
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
}
Probado en Chrome 71 y Firefox 65
cámara rusa
Guardar una referencia al original console
en una variable al comienzo del script y luego use esta referencia o redefina console
para señalar el valor capturado.
Ejemplo:
var c = window.console;
window.console = {
log :function(str) {
alert(str);
}
}
// alerts hello
console.log("hello");
// logs to the console
c.log("hello");
-
Claro que podría hacerlo, inyectando algo de JS justo antes de todo y estoy seguro de que esta solución funciona, pero quería una forma rápida de resolver el problema. Gracias de cualquier manera
– s3v3n
17 de agosto de 2011 a las 8:10
Echa un vistazo a stackoverflow.com/questions/7081433/…
– Reto Aebersold
17 de agosto de 2011 a las 7:56
Parece que hay un problema abierto con Magento con respecto a esto: magentocommerce.com/bug-tracking/issue/?issue=11312
– RoccoC5
17 de agosto de 2011 a las 8:09
Sí, parece que tengo este problema, pero no tengo la intención de cambiar el código de Magento y, para desarrolladores, estoy de acuerdo con la solución aceptada.
– s3v3n
17 de agosto de 2011 a las 8:13