Error de IE9: JavaScript solo funciona después de abrir las herramientas de desarrollador una vez.
Nuestro sitio ofrece descargas de pdf gratuitas a los usuarios, y tiene una función simple de "ingresar contraseña para descargar". Sin embargo, no funciona en absoluto en Internet Explorer.
Puedes verlo por ti mismo en este ejemplo .
El pase de descarga es "makeuseof". En cualquier otro navegador, funciona bien. En IE, ambos botones no hacen nada.
Lo más curioso que he encontrado es que si abres y cierras la barra de herramientas del desarrollador con F12, de repente todo comienza a funcionar.
Hemos probado el modo de compatibilidad y tal, nada hace la diferencia.
¿Cómo hago que esto funcione en Internet Explorer?
javascript
internet-explorer
internet-explorer-9
James Bruce
fuente
fuente
gulp-strip-debug
. Elimina todos losconsole.*
métodos, ideales para compilaciones de producción o pruebas en IE.console
, sino con mi uso de solicitudes angulares y de almacenamiento en caché. Vea las respuestas aquí y aquí para más.Respuestas:
Parece que podría tener algún código de depuración en su javascript.
La experiencia que está describiendo es típica del código que contiene
console.log()
o cualquiera de las otrasconsole
funciones.los
console
objeto solo se activa cuando se abre la barra de herramientas de desarrollo. Antes de eso, llamar al objeto de consola dará como resultado que se informe comoundefined
. Después de abrir la barra de herramientas, la consola existirá (incluso si la barra de herramientas se cierra posteriormente), por lo que las llamadas a la consola funcionarán.Hay algunas soluciones a esto:
La más obvia es revisar su código eliminando referencias a
console
. No deberías dejar cosas así en el código de producción de todos modos.Si desea mantener las referencias de la consola, puede envolverlas en una
if()
declaración o en algún otro condicional que verifique si el objeto de la consola existe antes de intentar llamarlo.fuente
if(!console) {console={}; console.log = function(){};}
if(!console)
causará el mismo error - debería leerif(!window.console)
HTML5 Boilerplate tiene un buen código prefabricado para solucionar problemas de consola:
Como @ plus señaló en los comentarios, la última versión está disponible en su página de GitHub
fuente
src
subdirectorio: github.com/h5bp/html5-boilerplate/blob/master/src/js/plugins.jsAquí hay otra posible razón además del
console.log
problema (al menos en IE11):Cuando la consola no está abierta, IE realiza un almacenamiento en caché bastante agresivo, así que asegúrese de que cualquier
$.ajax
llamada oXMLHttpRequest
llamada tenga el almacenamiento en caché establecido en falso.Por ejemplo:
Cuando la consola del desarrollador está abierta, el almacenamiento en caché es menos agresivo. Parece ser un error (¿o tal vez una característica?)
fuente
Esto resolvió mi problema después de que le hice un cambio menor. Agregué lo siguiente en mi página html para solucionar el problema de IE9:
fuente
Además del '
console
' problema de uso mencionado en la respuesta aceptada y otras, hay al menos otra razón por la cual a veces las páginas en Internet Explorer funcionan solo con las herramientas de desarrollador activadas.Cuando Developer Tools está habilitado, IE realmente no usa su caché HTTP (al menos por defecto en IE 11) como lo hace en modo normal.
Significa que si su sitio o página tiene un problema de almacenamiento en caché (si almacena más de lo que debería, por ejemplo, ese fue mi caso), no verá ese problema en el modo F12. Entonces, si javascript realiza algunas solicitudes AJAX almacenadas en caché, es posible que no funcionen como se esperaba en el modo normal y que funcionen bien en el modo F12.
fuente
Supongo que esto podría ayudar, agregando esto antes de cualquier etiqueta de javascript:
fuente
try catch
detectar que existe una variable es una mala idea. No solo es lento, sino que si tiene más de una declaración en su bloque try, podría obtener una excepción por un motivo diferente. No use esto, al menos useif (typeof console == 'undefined')
Si está utilizando AngularJS versión 1.X, podría utilizar el servicio $ log en lugar de utilizar console.log directamente.
https://docs.angularjs.org/api/ng/service/$log
Entonces, si tienes algo similar a
puedes reemplazarlo con
Angular 2+ no tiene ningún servicio de registro incorporado .
fuente
Si está usando
angular
y es decir,9, 10
oedge
usa:Para desactivar por completo
cache
.fuente
Sucedió en IE 11 para mí. Y estaba llamando a la función jquery .load. Así que lo hice a la antigua usanza y puse algo en la url para deshabilitar el almacenamiento en caché.
fuente
Obtuve otra alternativa para las soluciones ofrecidas por runeks y todotresde que también evita las trampas discutidas en los comentarios a la respuesta de Spudley :
Es un poco desaliñado pero, por otro lado, es conciso y cubre todos los métodos de registro cubiertos en la respuesta de runeks y tiene la gran ventaja de que puede abrir la ventana de la consola de IE en cualquier momento y los registros vienen fluyendo.
fuente
Nos encontramos con este problema en IE 11 en Windows 7 y Windows 10. Descubrimos cuál era exactamente el problema al activar las capacidades de depuración para IE (IE> Opciones de Internet> pestaña Avanzado> Navegación> Desmarcar Desactivar depuración de scripts (Internet Explorer) ). Los administradores de dominio normalmente verifican esta característica en nuestro entorno.
El problema era porque estábamos usando el
console.debug(...)
método dentro de nuestro código JavaScript. La suposición hecha por el desarrollador (yo) era que no quería que se escribiera nada si la consola de Developer Tools del cliente no estaba abierta explícitamente. Si bien Chrome y Firefox parecían estar de acuerdo con esta estrategia, a IE 11 no le gustó nada. Al cambiar todas lasconsole.debug(...)
declaraciones porconsole.log(...)
declaraciones, pudimos continuar registrando información adicional en la consola del cliente y verla cuando estaba abierta, pero de lo contrario mantenerla oculta para el usuario típico.fuente
Puse la resolución y solucioné mi problema. Parece que la solicitud de AJAX que puse dentro de mi JavaScript no se estaba procesando porque mi página tenía algún problema de caché. si su sitio o página tiene un problema de almacenamiento en caché, no verá ese problema en el modo desarrolladores / F12. mi JavaScript AJAX en caché solicita que no funcione como se esperaba y que la ejecución se rompa, lo que F12 no tiene ningún problema. Así que solo agregué un nuevo parámetro para hacer que el caché sea falso.
Parece que IE necesita específicamente que esto sea falso para que la actividad de AJAX y JavaScript se ejecute bien.
fuente