Fancybox no funciona con jQuery v1.9.0

Fancybox se rompe con el nuevo jQuery v1.9.0.

Afecta a ambos, Fancybox v1.3.4 y below – y – v2.1.3 e inferior.

Los errores que se muestran son:

v1.3.4:

Timestamp: 15/01/2013 10:03:28 AM Error: TypeError: b.browser is undefined Source File: ...fancybox/jquery.fancybox-1.3.4.pack.js Line: 18 

… otros errores

 Uncaught TypeError: Cannot read property 'msie' of undefined jquery.fancybox-1.3.4.pack.js:18 Uncaught TypeError: Object [object Object] has no method 'fancybox' 

En v2.1.3:

 Timestamp: 15/01/2013 10:09:58 AM Error: TypeError: $.browser is undefined Source File: h.../fancybox2.1.3/jquery.fancybox.js Line: 139 

Si está utilizando esto para llamar a jQuery:

  

… ¡ cualquiera de sus implementaciones de fancybox existentes fallará!

Parece que existe un error en jQuery informado aquí: http://bugs.jquery.com/ticket/13183 que rompe el script de Fancybox.

También consulte https://github.com/fancyapps/fancyBox/issues/485 para obtener más referencias.

Como solución alternativa, restituya a jQuery v1.8.3 mientras se corrige el error jQuery o se repara el Fancybox.


ACTUALIZACIÓN (16 de enero de 2013): se ha lanzado Fancybox v2.1.4 y ahora funciona bien con jQuery v1.9.0.

Para fancybox v1.3.4, aún necesita retroceder a jQuery v1.8.3 o aplicar la secuencia de comandos de migración tal como lo señala la respuesta de @Manu .


ACTUALIZACIÓN (17 de enero de 2013): solución para los usuarios de Fancybox v1.3.4 :

Parchee el archivo fancybox js para que funcione con jQuery v1.9.0 de la siguiente manera:

  1. Abra el archivo jquery.fancybox-1.3.4.js (versión completa, no la versión del paquete ) con un editor de texto / html.
  2. Encuentra alrededor de la línea 29 donde dice:

     isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, 

    y reemplácelo por ( EDITADO el 19 de marzo de 2013: filtro más preciso):

     isIE6 = navigator.userAgent.match(/msie [6]/i) && !window.XMLHttpRequest, 

    ACTUALIZACIÓN (19 de marzo de 2013): también reemplace $.browser.msie por navigator.userAgent.match(/msie [6]/i) alrededor de la línea 615 (y / o reemplace todas las instancias de $.browser.msie , si corresponde), gracias joofow ... eso es todo!

O descargue la versión ya revisada desde AQUÍ (ACTUALIZADA el 19 de marzo de 2013 ... gracias Fairylee por señalar el corchete de cierre adicional)

NOTA : este es un parche no oficial y no está respaldado por el autor de Fancybox, sin embargo funciona como está. Puede usarlo bajo su propio riesgo;)

Opcionalmente, puede retroceder a jQuery v1.8.3 o aplicar la secuencia de comandos de migración tal como lo señala la respuesta de @Manu .

Hola, esto se debe a la nueva versión de jQuery => 1.9.0

Puede consultar la actualización: http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/

jQuery.Browser está en desuso. puede conservar la última versión agregando un script de migración: http://code.jquery.com/jquery-migrate-1.0.0.js

reemplazar:

  

por:

   

en tu página y su funcionamiento.

Los eventos globales también están en desuso.

Aquí hay un parche que soluciona los problemas del navegador y del evento:

 --- jquery.fancybox-1.3.4.js.orig 2010-11-11 23:31:54.000000000 +0100 +++ jquery.fancybox-1.3.4.js 2013-03-22 23:25:29.996796800 +0100 @@ -26,7 +26,9 @@ titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('
')[0], { prop: 0 }), - isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, + isIE = !+"\v1", + + isIE6 = isIE && window.XMLHttpRequest === undefined, /* * Private methods @@ -322,7 +324,7 @@ loading.hide(); if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { - $.event.trigger('fancybox-cancel'); + $('.fancybox-inline-tmp').trigger('fancybox-cancel'); busy = false; return; @@ -389,7 +391,7 @@ content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); }; - $.event.trigger('fancybox-change'); + $('.fancybox-inline-tmp').trigger('fancybox-change'); content .empty() @@ -612,7 +614,7 @@ } if (currentOpts.type == 'iframe') { - $('').appendTo(content); } wrap.show(); @@ -912,7 +914,7 @@ busy = true; - $.event.trigger('fancybox-cancel'); + $('.fancybox-inline-tmp').trigger('fancybox-cancel'); _abort(); @@ -957,7 +959,7 @@ title.empty().hide(); wrap.hide(); - $.event.trigger('fancybox-cleanup'); + $('.fancybox-inline-tmp, select:not(#fancybox-tmp select)').trigger('fancybox-cleanup'); content.empty();

En caso de que alguien todavía tenga que admitir el fancybox heredado con jQuery 3.0+, aquí hay algunos otros cambios que deberá realizar:

.unbind () obsoleto

Reemplazar todas las instancias de .unbind con .off

.removeAttribute () no es una función

Cambie las líneas 580-581 para usar jQuery’s .removeAttr() lugar:

Código antiguo:

 580: content[0].style.removeAttribute('filter'); 581: wrap[0].style.removeAttribute('filter'); 

Nuevo código:

 580: content.removeAttr('filter'); 581: wrap.removeAttr('filter'); 

Esto combinado con el otro parche mencionado anteriormente resolvió mis problemas de compatibilidad.