Fancybox不能使用jQuery v1.9.0

Fancybox打破了新的jQuery v1.9.0。

它同时影响Fancybox v1.3.4及以下 – 和 – v2.1.3及以下版本。

显示的错误是:

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 

…其他错误

 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' 

在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 

如果你使用这个来调用jQuery:

 <script src="jquery-latest.js"></script> 

任何你现有的fancybox实现将失败!

它似乎存在一个在这里报告的jQuery中的错误: http ://bugs.jquery.com/ticket/13183打破Fancybox脚本。

另请参阅https://github.com/fancyapps/fancybox/issues/485以获取进一步参考。

作为一个解决方法,回滚到jQuery v1.8.3,而无论是jQuery错误修复或Fancybox修补。


更新 (2013年1月16日):Fancybox v2.1.4已经发布,现在可以正常使用jQuery v1.9.0。

对于fancybox v1.3.4,你仍然需要回滚到jQuery v1.8.3,或像@Manu的回答那样应用迁移脚本


更新 (2013年1月17日): Fancybox v1.3.4用户的解决方法:

修改fancybox js文件 ,使其与jQuery v1.9.0一起工作如下:

  1. 用文本/ html编辑器打开jquery.fancybox-1.3.4.js文件(完整版本, 不包装版本 )。
  2. 在线29周围find它说:

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

    并用(2013年3月19日编辑 :更精确的filter)代替:

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

    更新 (2013年3月19日):也可以通过在615行左右的navigator.userAgent.match(/msie [6]/i)replace$.browser.msie (和/或replace所有$.browser.msie实例,如果有的话)谢谢joofow …就是这样!

从这里下载已经修补的版本(更新于2013年3月19日…感谢fairylee指出额外的右括号)

注意 :这是一个非官方的补丁,不受Fancybox作者的支持,但是它的工作原理是一样的。 您可能会使用它,风险自负;)

或者,您可能更愿意回滚到jQuery v1.8.3,或像@Manu的答案所指出的那样应用迁移脚本

嗨,这是由于新版本的jQuery => 1.9.0

你可以检查更新: http : //blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/

jQuery.Browser已弃用。 您可以通过添加迁移脚本来保持最新版本: http : //code.jquery.com/jquery-migrate-1.0.0.js

replace:

 <script src="jquery-latest.js"></script> 

通过:

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

在你的页面和它的工作。

全球事件也被弃用。

这里有一个补丁,它修复了浏览器和事件问题:

 --- 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();