¿En qué circunstancias es window.console.log
define en Internet Explorer 9?
Incluso cuando window.console.log
se define, window.console.log.apply
ywindow.console.log.call
no está definido. ¿Por qué es esto?
[Pregunta relacionada para IE8: ¿Qué pasó con console.log en IE8? .]
javascript
logging
internet-explorer-9
mloughran
fuente
fuente
Respuestas:
En Internet Explorer 9 (y 8), el
console
objeto solo se expone cuando las herramientas de desarrollador se abren para una pestaña en particular. Si oculta la ventana de herramientas del desarrollador para esa pestaña, elconsole
objeto permanece expuesto para cada página a la que navega. Si abre una pestaña nueva, también debe abrir las herramientas de desarrollador para esa pestaña para queconsole
objeto quede expuesto.El
console
objeto no forma parte de ningún estándar y es una extensión del Modelo de Objetos del Documento. Al igual que otros objetos DOM, se considera un objeto host y no se requiere que heredeObject
, ni sus métodosFunction
, como lo hacen las funciones y objetos ECMAScript nativos. Esta es la razónapply
ycall
no están definidos en esos métodos. En IE 9, la mayoría de los objetos DOM se mejoraron para heredar de tipos ECMAScript nativos. Como las herramientas de desarrollo se consideran una extensión de IE (aunque sea una extensión incorporada), claramente no recibieron las mismas mejoras que el resto del DOM.Para lo que vale, aún puede usar algunos
Function.prototype
métodos enconsole
métodos con un poco debind()
magia:fuente
console
objeto de Firebug .Una solución simple a este problema de console.log es definir lo siguiente al comienzo de su código JS:
Esto funciona para mí en todos los navegadores. Esto crea una función ficticia para console.log cuando el depurador no está activo. Cuando el depurador está activo, el método console.log se define y se ejecuta normalmente.
fuente
Sé que esta es una pregunta muy antigua, pero creo que agrega una alternativa valiosa de cómo lidiar con el problema de la consola. Coloque el siguiente código antes de cualquier llamada a la consola. * (Así que su primer script).
Referencia:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js
fuente
console.log solo se define cuando la consola está abierta. Si desea verificarlo en su código, asegúrese de verificarlo dentro de la propiedad de la ventana
Esto arroja una excepción en IE9 y no funcionará correctamente. No hagas esto
fuente
Después de leer el artículo del comentario anterior de Marc Cliament, ahora he cambiado mi función multipropósito console.log de navegador cruzado para que se vea así:
fuente
Function.prototype.apply.call(console.log, console, arguments);
Me gustaría mencionar que IE9 no genera el error si usa console.log con herramientas de desarrollador cerradas en todas las versiones de Windows. En XP sí, pero en Windows 7 no. Entonces, si dejó de admitir WinXP en general, está bien usando console.log directamente.
fuente
Qué tal si...
fuente