TypeError no capturado: no se puede leer la propiedad 'msie' de undefined - jQuery tools

190

Recibo el siguiente error en la consola de desarrollo de Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

Entiendo que es porque .browserahora está en desuso en jQuery, sin embargo, estoy usando la última versión de las herramientas de jQuery y todavía está dando el error, revisé el jsarchivo y está allí.

¿Cómo puedo evitar esto para que no dé el error?

Colin747
fuente
1
Este error es insuficiente. ¿De qué elemento estás tratando de leer esto?
Siddharth Gupta
No he usado .browsermi código en absoluto. Parece estar detectándolo en el archivo de herramientas jQuery.
Colin747
66
El browserobjeto no solo está en desuso en 1.9, se ha ido . Si jQuery Tools todavía lo usa, entonces jQuery Tools está roto.
Puntiagudo
1
@Alexander que parecía deshacerse del error. Puede poner una respuesta si lo desea.
Colin747
3
Las últimas herramientas jQuery solo se han probado con jQuery 1.7. jQuery 1.9 no es compatible con la última versión de jQuery Tools; Es así de simple. Volcar jQuery Tools o degradar jQuery a cualquier versión inferior a 1.9 que funcione. De lo contrario, no esperes que nadie actualice jQuery Tools, ha estado sin un desarrollador durante los últimos años.
Sparky

Respuestas:

189

El $.browsermétodo se ha eliminado a partir de jQuery 1.9.

jQuery.browser() removed

El jQuery.browser()método ha quedado en desuso desde jQuery 1.3 y se elimina en 1.9. Si es necesario, está disponible como parte del complemento jQuery Migrate. Recomendamos utilizar la detección de funciones con una biblioteca como Modernizr.

- Guía de actualización de jQuery Core 1.9 .

Como se indica en la Guía de actualización, puede intentar usar el complemento jQuery Migrate para restaurar esta funcionalidad y dejar que jQuery Tools funcione.

Alejandro
fuente
242

Puede consultar esta solución por AJ. Es bastante sencillo, solo copie y pegue las siguientes líneas de código.

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

Referencia :

JrBriones
fuente
44
Esto funciona perfecto! Pero supongo que esto debería usarse como un parche, en lugar de una solución, ¿verdad?
Jobokai
Gracias, usando un complemento jquery que estaba usando esto y esta fue una solución fácil a corto plazo hasta que se implemente una solución real.
Joe Meyer
Gracias. Esto solucionó Query Tools v1.2.7, ya que actualizamos JQuery a la última versión.
bsentosa
1
WOW, si pudiera darte más de 10, lo haré ahora mismo.
Iman Hejazi
9
Esta respuesta ya no es correcta, ya que IE11 no tiene el token MSIE en la userAgentcadena.
Dave Methvin
47

Use la siguiente etiqueta de script en su archivo jsp / js:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

esto funcionará seguro.

Manisha Srivastava
fuente
asegúrese de tener una conexión a internet que funcione. Si está utilizando fuera de línea, descargue el archivo js al final y luego consulte ese archivo.
Manisha Srivastava
Bueno, puedo ver que está alojado en línea ... de todos modos, gracias lo resolví con jquery.noConflict () ya que tenía dos versiones de jquery en la misma página.
Prerit Mohan
@ User5590: en cualquier momento :)
Manisha Srivastava
No debería usar jquery no minificado en producción: consulte cdnjs.com por ejemplo. Y use HTTPS en su lugar.
Takman
27

Uso el siguiente código después de incluir el archivo js y está funcionando ahora.

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>
Atik Khan
fuente
Este enlace de enlace me da un error, pero este pequeño código que escribiste me ayudó mucho, gracias amigo.
Saman
7

Aquí está el error de jQuery Tools en GitHub . Puedes probar uno de los parches.

editar : no me parece que jQuery Tools esté recibiendo mucho soporte. Personalmente, no comenzaría un nuevo proyecto con una dependencia de esa biblioteca a menos que estuviera preparado para asumir el control yo mismo.

Puntiagudo
fuente
1
+1, jQuery Tools ha sido un completo desastre durante los últimos años. Que no se trata de "obtener mucho apoyo" es muy preciso y una gran subestimación. Creo que solo ha habido una actualización menor desde jQuery 1.3 y ningún desarrollador en los últimos años también.
Sparky
De acuerdo, ¿alguien tiene una recomendación para una biblioteca de reemplazo? ¿Algo con un control deslizante de desplazamiento, superposición y rango de entrada? Evito jQuery mobile porque viene con un estilo previo. Lo he diseñado antes y es una pesadilla.
inorganik
55
Me mudé a encontrar bibliotecas mínimas bien escritas para cada función que quiero. es decir: deslizador de entrada de rango: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . Encuentro mucho mejor soporte y, en general, una huella más pequeña en la búsqueda de bibliotecas individuales como estas
enero
4

Simplemente agregué

jQuery.browser = {
    msie: false,
    version: 0
};

después del script jquery, porque ya no me importa IE.

userlond
fuente
3

Reemplace su JS con

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

Enlace fuente

Bugfixer
fuente
En el momento para jquery 1.7+, la última jquery-ui es:<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Relojero
0

Como no tengo planes para apoyar antiguas versiones de MS IE en absoluto, simplemente he sustituye todas las referencias a browser.msiela false. No es una buena solución, lo sé, pero funciona para mí.

(En realidad, aparecieron como !browser.msie, lo que podría omitirse de las condiciones).

Lerin Sonberg
fuente
0

Usar como golpe

$(function (a) {

. . . . .then en su función puede usar la propiedad msie como

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

buena suerte

HamidSadeghi
fuente
0

Usar como golpe

uso este comando y resuelvo

"Error de tipo no capturado: no se puede leer la propiedad 'msie' de undefined" Error

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}
Arezoo
fuente
0

Recibí este error al usar JQuery 1.10 y JQuery UI 1.8. Pude resolver este error actualizando a la última IU JQuery 1.11.4.

Pasos para actualizar la interfaz de usuario de JQuery desde Visual Studio:

  • Navega hasta Proyecto o Solución
  • Haga clic derecho: "Administrar paquetes NuGet"
  • A la izquierda, haga clic en la pestaña "Paquetes instalados"
  • Busque "JQuery UI (Biblioteca combinada)" y haga clic en Actualizar
  • Si lo encuentra, selecciónelo y haga clic en Actualizar
  • Si no lo encuentra, búsquelo en la pestaña "En línea> nuget.org" a la izquierda y haga clic en instalar. Si la versión anterior de Jquery UI todavía existe, se puede eliminar del proyecto
Lógica Primero
fuente
0

Si tiene jQuery definido dos veces, entonces podría obtener este error. Por ejemplo, si está trabajando con Primefaces (ya incluye jQuery) y lo define en otro lugar.

Carlos UCR
fuente