2013-01-24 13 views
10

ottengo un errore con improvvisato ver 4.1 durante l'esecuzione in l'ultima jquery 1.9Impromptu .. con jQuery 1.9 - errore browser.msie

Uncaught TypeError: Impossibile leggere la proprietà 'MSIE' di indefinito

Questo non era il caso con le versioni precedenti di jQuery.

La linea incriminata in estemporanea è la linea 20:

var ie6 = ($.browser.msie && $.browser.version < 7); 
+1

'jQuery.browser': deprecato: 1.3, rimosso: 1.9 – undefined

+0

Aha ... così improvvisato si romperà per tutti? – Upland

+0

Se quel plugin dipende dalla proprietà 'browser', con jQuery 1.9, sì. – undefined

risposta

24

Si potrebbe rattoppare Impromptu sostituire questa linea:

var ie6 = ($.browser.msie && $.browser.version < 7); 

... da questo:

var ie6 = (navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/)); 

... quindi ora può funzionare con jQuery v1.9.0 +. Opzionalmente, è possibile eseguire il rollback a jQuery v1.8.3

EDIT (12 marzo 2013)

Grazie @johntrepreneur per i vostri commenti, lei ha ragione. due note:

  1. Questa linea Modificato:

    var ie6 = (navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/)); 
    

    ... dovrebbe essere sostituito da questo:

    var ie6 = (navigator.userAgent.match(/msie [6]/i)); 
    

    ... il mio male, mi sono precipitato a scrivere la patch. Questo dovrebbe fare il trucco.

  2. Impromptu ha completamente rimosso il supporto IE6 nella loro last commit (marzo 25/2013 dopo questo post originale). La questione ha portato dal PO era che Impromptu ha rotto con jQuery v1.9 + ... aggiornare il file Impromptu js al last version fa anche risolvere il problema.

+0

@undefined: Immagino che tutte le istanze correlate debbano essere riparate come soluzione alternativa. – JFK

+0

Sì, in realtà controlla solo IE6. +1 – undefined

+1

@JFK la tua linea di sostituzione non è la stessa e corrisponde erroneamente poiché trova una stringa "6" nella stringa userAgent. L'ho provato in IE8 e le tue corrispondenze di controllo (quando non dovevano) dato che la stringa userAgent ha "msie" in esso e un "6" anche altrove: "Mozilla/4.0 (compatibile; MSIE 8.0; Windows NT 6.1 ; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) ". – johntrepreneur

6

preferisco questo per indirizzare un intervallo, verrà eseguito il codice solo su < IE9 & jQuery 1.9+

if (/msie [1-8]./.test(navigator.userAgent.toLowerCase())) 
{ 
    //code here 
} 
2

Fin Jquery deprecato il funcionality $ .Browser il modo più semplice che ho trovato , era quello di creare una società globale in javascript

var LTE_IE9 = false; 

e in uso la condizione HTML IE selettori

<!--[if lte IE 9]> 
<script>LTE_IE9 = true;</script> 
<![endif]--> 
+0

Questo è in realtà abbastanza intelligente. – KyleFarris

0

io lo uso.

var browser = $.browser; 
    if (! browser) { 
     var ua = navigator.userAgent.toLowerCase(); 
     var m = /(msie) ([\w.]+)/.exec(ua) || ! /compatible/.test(ua) && /(mozilla)/.exec(ua) || []; 
     browser = { version: m[2] }; 
     browser[ m[1] ] = true; 
    } 
0

aggiungere Jquery migrate plug

//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js

$.browser.msie rimosso dal> jquery 1.9.x

0

da $ .browse è deprecato dal jQuery V. 1.4 e rimosso dopo jQuery V. 1.9

ancora si può risolvere questo problema da questi riga di codice (per tutti i browser)

jQuery.browser = {}; 
jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase()); 

Funziona bene per me;

Problemi correlati