103

Fancyboxは新しいjQueryv1.9.0で壊れます。

これは、Fancyboxv1.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="http://code.jquery.com/jquery-latest.js"></script>

...既存のfancyboxの実装はどれも失敗します!!

4

4 に答える 4

203

ここで報告されているjQueryにバグが存在するようです:http://bugs.jquery.com/ticket/13183Fancyboxスクリプトを壊します。

詳細については、 https://github.com/fancyapps/fancyBox/issues/485も確認してください。

回避策として、jQueryのバグが修正されているか、Fancyboxにパッチが適用されている間に、jQueryv1.8.3にロールバックします。


更新(2013年1月16日):Fancybox v2.1.4がリリースされ、jQueryv1.9.0で正常に動作するようになりました。

fancybox v1.3.4-の場合でも、jQuery v1.8.3にロールバックするか、@Manuの回答で指摘されているように移行スクリプトを適用する必要があります。


更新(2013年1月17日):Fancybox v1.3.4のユーザーの回避策:

fancybox jsファイルにパッチを適用して、次のようにjQueryv1.9.0で動作するようにします。

  1. jquery.fancybox -1.3.4.jsファイル(パックバージョンではなくフルバージョン)をtext/htmlエディターで開きます。
  2. それが言う29行目あたりを見つけてください:

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

    そしてそれを(2013年3月19日編集:より正確なフィルター)に置き換えます:

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

    更新(2013年3月19日):また、 615行$.browser.msie目あたりに置き換えますnavigator.userAgent.match(/msie [6]/i)(および/またはすべての$.browser.msieインスタンスを置き換えます)、joofowに感謝します ...それだけです!

または、パッチが適用されたバージョンをここからダウンロードします(2013年3月19日更新...余分な閉じ括弧を指摘してくれたfairyleeに感謝します)

:これは非公式のパッチであり、Fancyboxの作成者によってサポートされていませんが、そのまま機能します。あなたはあなた自身の責任でそれを使うかもしれません;)

オプションで、jQuery v1.8.3にロールバックするか、@Manuの回答で指摘されているように移行スクリプトを適用することもできます。

于 2013-01-15T18:23:02.577 に答える
29

こんにちは、これは 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>

に :

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

あなたのページとその作業で。

于 2013-01-16T10:04:50.693 に答える
19

グローバル イベントも非推奨です。

ブラウザとイベントの問題を修正するパッチは次のとおりです。

--- 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();
于 2013-03-22T22:40:45.630 に答える