2010-10-19 320 views
7

Per qualche motivo, sto ottenendo il seguente errore Javascript in Internet Explorer 8 sulla riga 3156 di jquery.js (versione 1.4.3, non compressa versione): Object doesn't support this property or method. Nessun errore si verifica in Firefox e Google Chrome.Errore Javascript IE "Oggetto non supporta questa proprietà o metodo" all'interno di jQuery

Questa è la linea l'errore si verifica:

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

Investigation (console.log(Expr.leftMatch[type])) produce il seguente risultato interessante: In Google Chrome, emette

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

Tuttavia, in Internet Explorer è il uscita:

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

Su quali exec non può essere chiamato (non è definito). La funzione indicata non è presente in jquery.js. Qualcuno ha qualche idea del perché questo accada, o cosa posso fare per risolverlo?

Purtroppo non ho ancora potuto creare un semplice script per riprodurre il problema, anche se ho trovato this post of someone having the same problem, ma non offre una soluzione (l'ultimo post suggerisce che la pagina debba essere eseguita in modalità Standard, ma il mio è già).

+0

Qual è il valore di "tipo" nel punto in cui è stata stampata la voce "leftMatch"? – Pointy

+0

Cosa? - Questo messaggio di errore non è abbastanza specifico per te? MrGreen (è quasi utile come il messaggio di errore "Non definita non è una funzione") ;-) – scunliffe

+0

@Pointy: "previousObject". – Aistina

risposta

8

Come risulta, sono riuscito a capirlo da solo dopo diverse ore dolorose. Sembra che il motore di selezione Sizzle si interrompa in questo modo inaspettato (e solo in Internet Explorer), se è stato definito Object.prototype.previousObject altrove.

Rimuovere questa dichiarazione o rinominare previousObject in qualcos'altro risolve il problema.

La cosa divertente è che ho inserito il codice anche lì (Object.prototype.previousObject = [the function in my question]), ma non ho riconosciuto il codice.

Bene, questo è un altro giorno pieno di potenziale di sviluppo sprecato.

+0

Wow. Beh, questo è bello saperlo, di sicuro !! – Pointy

+0

x2 grazie per aver pubblicato un aggiornamento per tutti gli altri. –

+2

Lezione appresa, non scherzare con il protoipo dell'oggetto –

-1

quale versione di IE stai utilizzando?

Sei per caso in esecuzione in modalità compatibilità? Se si sta eseguendo il test su un dominio locale, per impostazione predefinita IE imposta la modalità compatibilità su e ha riscontrato problemi casuali di tipo wierd come questo.

Se si esegue IE 8, è possibile provare a modificare la modalità browser in strumenti di sviluppo (f12) per verificare se il problema persiste.

+0

Scusa, ho dimenticato di dirlo, sto utilizzando IE8. Funziona su un server web locale e gli strumenti di sviluppo segnalano: 'Modalità Documenti: Standard IE8'. – Aistina

3

(Purtroppo la mia reputazione è tale che non posso commentare direttamente sulla soluzione di cui sopra)

ho scoperto lo stesso comportamento si verifica se si tenta di aggiungere un metodo chiamato "ereditato" al Object.prototype, vale a dire Object.prototype.inherited = <some func>

colpisce IE6, 7 & 8 ma sembra essere fissati in IE9 (beta)

2

Cordiali saluti, abbiamo anche avuto lo stesso problema quando abbiamo ridefinito Object.prototype.keys.

Problemi correlati