bootstrap - Fancybox no funciona con jQuery v1.9.0
fancybox youtube (4)
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.
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:
<script src="http://code.jquery.com/jquery-latest.js"></script>
... ¡ cualquiera de sus implementaciones de fancybox existentes fallará!
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:
<script src="http://code.jquery.com/jquery-latest.js"></script>
por:
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0.js"></script>
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($(''<div/>'')[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'') {
- $(''<iframe id="fancybox-frame" name="fancybox-frame'' + new Date().getTime() + ''" frameborder="0" hspace="0" '' + ($.browser.msie ? ''allowtransparency="true""'' : '''') + '' scrolling="'' + selectedOpts.scrolling + ''" src="'' + currentOpts.href + ''"></iframe>'').appendTo(content);
+ $(''<iframe id="fancybox-frame" name="fancybox-frame'' + new Date().getTime() + ''" frameborder="0" hspace="0" '' + (isIE ? ''allowtransparency="true""'' : '''') + '' scrolling="'' + selectedOpts.scrolling + ''" src="'' + currentOpts.href + ''"></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();
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:
- Abra el archivo jquery.fancybox-1.3.4.js (versión completa, no la versión del paquete ) con un editor de texto / html.
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
pornavigator.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 .