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?


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.


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 :


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.


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>

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.


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.


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


En el momento para jquery 1.7+, la última jquery-ui es:<link rel="stylesheet" href="https://stackoverflow.com//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).


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


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;
}

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.