Problema de jQuery en Internet Explorer 8

78

Estoy tratando de que mis funciones jQuery funcionen en IE8. Estoy cargando la biblioteca desde los servidores de Google ( http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js ).

El $(function(){})nunca se llama. En cambio, obtengo un error Object expected. Abrí el desarrollador y lo ejecuté typeof $en la consola, y apareció como undefined.

He intentado ir a otros sitios que sé que usan jQuery (jquery.com), y todos funcionan, ¿hay algo que me pueda perder aquí?

Shashank Agrawal
fuente
7
Sin ver algo de su página, esto es casi imposible de diagnosticar. ¿Puede saber si la biblioteca jQuery se está cargando y ejecutando antes de que se ejecute su código?
ijw
Parece que el problema es que jQuery se está cargando. Establecí 3 puntos de interrupción dentro del archivo jQuery, y todos resultaron no válidos porque no hay un código ejecutable asociado con esa línea.
Intente cambiar el modo en IE8 para ver si funciona el modo IE7 o el modo Compatibilidad IE8. Puede hacerlo a través de las herramientas de desarrollo.
Jab
Tuve problemas similares al intentar cargar jQuery desde un script (agregando una etiqueta de script al encabezado) y llamarlo en el mismo script. Parecía una especie de problema de sincronización, ya que jQuery no se cargaba a tiempo. Lo resolví poniendo una etiqueta de script estático en el código HTML.
Tgr
Tengo el mismo problema al cargar jQuery desde el CDN de Microsoft: mi solución funciona en Chrome, pero no en IE8.
Marek Grzenkowicz

Respuestas:

42

Escriba "var" antes de las variables, cuando las defina. IE8 muere cuando no hay "var".

asd
fuente
Sin declaraciones "var" funcionan en IE7 e IE9. Es difícil de entender, ¿cómo podría MS pasar por alto tal error?
Neo
Gracias chicos por la respuesta ... Ustedes me salvaron la cabeza hoy :)
Ravi
3
Lo siento, pero esto no es cierto. Usamos varpara definir una variable con alcance local. Si define una variable sin var, en realidad crea una propiedad con alcance global, es decir, como una propiedad del objeto ventana. Consulte esta pregunta para obtener más información: stackoverflow.com/questions/1470488/…
James McCormack
Salvaste mi día. ¡Gracias! Esto realmente resolvió mi problema con IE10. Ahora mi sitio web móvil jQuery funciona a la
perfección
39

Corrección:

Compruebe su etiqueta de inclusión de script, ¿está usando

type="application/javascript" src="/path/to/jquery" 

cambiar a

type="text/javascript" src="/path/to/jquery" 
Ricardo
fuente
Esta es la solución para mí también
Blake Niemyjski
38

Estaba teniendo un problema similar. Las cosas funcionaron en IE6, Firefox e IE8 ejecutándose en modo de compatibilidad con IE7; pero no en IE8 'normal'. Mi solución fue poner este código en el encabezado

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

En cuanto a por qué jquery no funciona en IE8, no estoy claro.

JeffryHouser
fuente
19
eso es horrible! no resuelve el problema; simplemente lo hackea, y probablemente creará una gran cantidad de otros problemas. (El modo de compatibilidad con IE7 no es en realidad el mismo que el IE7, tiene errores, peculiaridades y fallos propios que no aparecen ni en IE7 normal ni en IE8)
Spudley
33
Si tiene una mejor solución, por favor compártala. Muchos enfoques para hacer que las cosas funcionen en IE son hacks.
JeffryHouser
8
Si es un truco, es uno recomendado por Microsoft. msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx
eric.christensen
11
Dado que alguien acaba de rechazar esto; díganos por qué y resalte su enfoque preferido.
JeffryHouser
7
Tuve este problema y lo resolví con la solución de Richard anterior. Cambié todo mi <script type = "application / javascript" ... a <script type = "text / javascript", incluida mi referencia de jquery al cdn de Google, e IE8 comenzó a funcionar. No tuve que poner toda la página en modo de compatibilidad para hacerlo.
Vineel Shah
12

La solución es actualizar a la última versión de jQuery. Tuve exactamente el mismo problema y me actualicé a 1.4.2 y todo funciona bien nuevamente en IE8.

Parece ser totalmente compatible con todas las cosas de jQuery 1.3.2 que hice también, ¡así que no tengo quejas aquí!

Peter Burlingham
fuente
3
Tengo este problema con 1.8 por lo que eso signifique.
Josh
10

Tuve este problema y probé las soluciones mencionadas aquí sin éxito.

Finalmente, me di cuenta de que estaba enlazando a la versión de Google CDN del script usando un http URLmientras que la página que incrustaba el script era un https page.

Esto hizo que IE no cargara jquery (le pregunta al usuario si desea cargar solo contenido seguro). Cambiar la URL de Google CDN para usar el esquema https solucionó el problema.

Sheltond
fuente
Sé que es una publicación antigua, pero es posible que desee echarle un vistazo a esto : tiene una sección sobre la forma en que Google ahora recomienda que use su CDN (que elimina este problema)
stef
8

Algunas personas que se encuentran con esta publicación pueden tener este problema con jquery e IE8 porque están usando> = jQuery v2. Utilice este código:

<!--[if lt IE 9]>
    <script src="jquery-1.9.0.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0.js"></script>
<!--<![endif]-->
stuartdotnet
fuente
6

jQuery no se está cargando, esto probablemente no sea específico de IE8. Verifique la ruta en su jQuery include. declaración. O mejor aún, use lo siguiente para la CDN:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>
cgp
fuente
3
Todo funciona en Firefox, Safari y Chrome. Puedo decir que la biblioteca se está descargando, pero no se está ejecutando. Establecí un punto de interrupción en la línea en el archivo jquery, y surgió diciendo que no hay un código ejecutable asociado con la línea.
5

Estaba arreglando una plantilla creada por otra persona que olvidó incluir el doctype.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Si no declara que doctype IE8 hace cosas extrañas en el modo Quirks.

Hone Watson
fuente
Probé todas las sugerencias anteriores ... cambiando el tipo de documento (de HTML5 "<! DOCTYPE html>" finalmente lo hizo funcionar. (En Dev Tools, muestra que la clase del elemento realmente cambia, pero supongo que el motor de renderizado de IE8 no ' t actualizar sobre cambios en el DOM para doctypes no reconocidos).
Stephen M. Harris
4

El error Object expectedsurge porque Jquery no está cargado. Esto sucede debido a la seguridad del navegador (generalmente IE) que no le permite ejecutar código fuente externo de JavaScript. Puede corregir este problema de la siguiente manera:

  • 1: Cambiar el nivel de seguridad del navegador para permitir la ejecución de código javascript externo. Puedes encontrar cómo hacer esto aquí

O

  • 2: Copie y pegue el código fuente de jquery en su página web para que no sea considerado como un script externo.

Prefiero la primera solución.

zelmarou
fuente
4

El evento onload no siempre funciona en IE7 / 8 en<head> ... </head>

Puede forzarlo agregando un script onload al final de su página antes de la etiqueta como se muestra a continuación.

  <script>
    window.onload();
  </script>
</body>
Andy Piddock
fuente
2

Tal vez inserte dos scripts, debería funcionar.

<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">/script> 
Vadim Sluzky
fuente
2

Esto solucionó mi problema en IE8:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

Ejecutando en localhost, tuve que cambiar https: // a http: //

Si intento navegar hasta el enlace seguro, obtengo que Internet Explorer no puede mostrar la advertencia amigable de la página web .

Siempre intente cargar sus scripts de texto en un navegador primero si hay problemas.

Lenny
fuente
2

Yo tenía los mismos problemas.

Lo resolví verificando que IE8 no estaba configurado correctamente para llegar a la URL de SRC.

Cambié esto, funciona bien.

Tom van Enckevort
fuente
1

Tuve el mismo problema. La solución fue agregar el enlace al archivo JQuery como un sitio confiable en IE.

Carlos Blanco
fuente
1

Creo que tienes el mismo problema que yo:

Message: Permission denied
Line: 13
Char: 27021
Code: 0
URI: http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.3.2.min.js

Debido a la referencia entre dominios. Intente alojar jquery.js en el mismo dominio.

Vanja
fuente
0

En resumen, se debe al motor de análisis de IE8.

¿Adivina por qué Microsoft también tiene problemas para trabajar con las nuevas etiquetas HTML5 (como "sección")? Es porque MS decidió que no utilizará el análisis XML regular, como el resto del mundo. Sí, es cierto, hicieron un montón de propaganda en XML pero al final, recurrieron a un motor de análisis "estúpido" en busca de "etiquetas conocidas" y estropearon las cosas cuando aparece algo nuevo.

Lo mismo ocurre con IE8 y el problema de jquery con "load", "get" y "post". Nuevamente, Microsoft decidió "seguir su propio camino" con la versión 8. Con la esperanza de resolver (d) esto en IE9, la única opción actual es recurrir al análisis sintáctico de IE7 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Oh, bueno ... qué sorpresa que Microsoft nos hizo publicar cosas en foros nuevamente. ;)

e-sushi
fuente
0

La solución en mi caso fue eliminar los caracteres especiales de la URL a la que intentas acceder. Tenía una tilde (~) y un símbolo de porcentaje allí, y la llamada $ .get () falló silenciosamente.

jorisw
fuente
0

¡OKAY! Sé que jQuery se está cargando. Yo sé esojQuery.textshadow.js está cargando. Puedo encontrar ambos scripts en Developer Tools.

La parte extraña: este código funciona en el área de contenido pero no en el banner. Incluso con un dedicadofixIE.css . Y funciona cuando pongo el CSS en línea. (Eso, por supuesto, estropea Firefox).

Incluso puse un intervalo de IE condicional alrededor del campo de texto en el banner sin suerte.

No encontré ninguna diferencia y tuve los mismos errores en ambos jquery-1.4.2.min.jsy jquery-1.2.6.min.js. jquery.textshadow.jsse descargó del sitio jQuery mientras intentaba encontrar una solución a este problema.

Esto no se publica en el sitio web.

Kyle
fuente