2010-10-19 116 views
7

Por alguna razón, obtengo el siguiente error de Javascript en Internet Explorer 8 en la línea 3156 de jquery.js (versión 1.4.3, no comprimido) versión): Object doesn't support this property or method. No se produce ningún error en Firefox y Google Chrome.IE Error de Javascript "El objeto no admite esta propiedad o método" dentro de jQuery

Esta es la línea que se produce el error en:

if ((match = Expr.leftMatch[ type ].exec(expr)) != null && match[2]) { 

Investigación (console.log(Expr.leftMatch[type])) produce el siguiente resultado interesante: En Google Chrome, se da salida a

/(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/ 

Sin embargo en Internet Explorer es el salida:

function() { 
    var p = this; 
    do p = p.previousSibling; 
    while (p && p.nodeType != 1); 
    return p; 
} 

En qué exec no se puede llamar (no está definido). La función citada no está presente en jquery.js. ¿Alguien tiene alguna pista de por qué sucede esto o qué puedo hacer para resolverlo?

Desafortunadamente, todavía no he podido crear una secuencia de comandos simple para reproducir el problema, aunque sí encontré this post of someone having the same problem, pero no ofrece una solución (la última publicación sugiere que la página se ejecute en modo estándar, pero el mío ya lo es).

+0

¿Cuál es el valor de "tipo" en el punto donde imprimió esa entrada "leftMatch"? – Pointy

+0

¿Qué? - ¿Ese mensaje de error no es lo suficientemente específico para ti? :-D (es casi tan útil como el mensaje de error "No definido no es una función") ;-) – scunliffe

+0

@Pointy: "objeto anterior". – Aistina

Respuesta

8

Como resultado, me las arreglé para resolverlo solo después de varias horas dolorosas. Parece que el motor del selector Sizzle se rompe de esta manera inesperada (y solo en Internet Explorer), si ha definido Object.prototype.previousObject en otro lugar.

Eliminar esa declaración, o cambiarle el nombre a previousObject a otra cosa soluciona el problema.

Lo curioso es que incluso puse ese código allí (el Object.prototype.previousObject = [the function in my question]), pero no reconocí el código.

Bueno, ese es otro día lleno de potencial de desarrollo desperdiciado.

+0

Wow. Bueno, es bueno saberlo, ¡seguro! – Pointy

+0

x2 Gracias por publicar una actualización para todos los demás. –

+2

Lección aprendida, no te metas con el prototipo del Objeto –

-1

¿qué versión de IE está ejecutando?

¿Corre por casualidad en modo compatibilidad? Si está realizando pruebas en un dominio local, de manera predeterminada, el IE establece el modo de compatibilidad, y tiene problemas experimentados aleatorios como este.

Si está ejecutando IE 8 puede intentar cambiar el modo de navegador en las herramientas de desarrollador (f12) para ver si el problema persiste.

+0

Lo siento, olvidé mencionar, estoy ejecutando IE8. Se ejecuta en un servidor web local, y las herramientas de desarrollador informan: 'Modo Documentos: Estándares IE8'. – Aistina

3

(Por desgracia mi reputación es tal que no puedo comentar directamente sobre la solución anterior)

he descubierto el mismo comportamiento se produce si intenta agregar un método llamado "heredado" a la Object.prototype, es decir Object.prototype.inherited = <some func>

afecta a IE6, 7 & 8, pero parece estar fijo en IE9 (beta)

2

FYI, también nos dieron el mismo problema cuando redefinimos Object.prototype.keys.

Cuestiones relacionadas