Fancybox不能与jQuery v1.9.0一起使用[f.browser未定义/无法读取属性'msie']

JFK*_*JFK 100 jquery fancybox fancybox-2

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
Run Code Online (Sandbox Code Playgroud)

......其他错误

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'
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

如果你用它来调用jQuery:

<script src="http://code.jquery.com/jquery-latest.js"></script>
Run Code Online (Sandbox Code Playgroud)

... 任何现有的fancybox实现都会失败!

JFK*_*JFK 199

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

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

作为一种解决方法,在修复jQuery错误或修补Fancybox时回滚到jQuery v1.8.3.


更新(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. 使用text/html编辑器打开jquery.fancybox-1.3.4.js文件(完整版,而不是打包版).
  2. 查找第29行,其中显示:

    isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
    
    Run Code Online (Sandbox Code Playgroud)

    并替换它(2013年3月19日编辑:更精确的过滤器):

    isIE6 = navigator.userAgent.match(/msie [6]/i) && !window.XMLHttpRequest,
    
    Run Code Online (Sandbox Code Playgroud)

    UPDATE(2013年3月19日):也取代$.browser.msie通过navigator.userAgent.match(/msie [6]/i)各地线615(和/或更换所有$.browser.msie的情况下,如果有的话),感谢joofow ......就是这样!

或者从这里下载已修补的版本(2013年3月19日更新...感谢fairylee指出额外的结束支架)

注意:这是一个非官方的补丁,Fancybox的作者不支持,但它按原样工作.您可以自担风险使用它;)

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


Man*_*anu 28

嗨这是由于新版本的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

替换:

<script src="http://code.jquery.com/jquery-latest.js"></script>
Run Code Online (Sandbox Code Playgroud)

通过:

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0.js"></script>
Run Code Online (Sandbox Code Playgroud)

在你的页面和它的工作.


小智 18

全球事件也已弃用.

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

--- 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();
Run Code Online (Sandbox Code Playgroud)

  • 仅使用JFK答案的补丁说明,当我第二次尝试打开内联框时,我仍然会出现问题,并始终显示错误消息"无法加载请求的内容.请稍后重试." 而不是在第一次尝试时正确显示的内容.使用你的(不是那么明显的)附加补丁它最终会起作用. (4认同)
  • 如果有人在应用补丁时遇到问题,可以使用以下编辑文件:http://pastebin.com/9R2VFVBQ (4认同)