FancyboxはjQuery v1.9.0では機能しません[f.browserが未定義/プロパティ 'msie'を読み取れません]


100

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

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


27
だからこそ、本番環境では絶対に使用jquery-latest.jsないでください。
jrummell 2013年

1
最新バージョンのfancybox 2.1.5を使用してくださいfancyapps.com/fancybox
Mukesh

回答:


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


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

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

  1. 開きjquery.fancybox-1.3.4.jsファイル(フルバージョン、バージョンをパックしないテキスト/ HTMLエディタで)。
  2. それが言うところの29行目を見つけてください:

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

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

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

    UPDATE(2013年3月19日):また置き換える$.browser.msieことにより、navigator.userAgent.match(/msie [6]/i)ライン615(および/またはすべて置き換えるの周りの$.browser.msieいずれかの場合には、インスタンス)、おかげでjoofow ...それです!

または、ここからパッチ済みのバージョンをダウンロードしてください(2013年3月19日更新... 余分な終了ブラケットを指摘してくれたfairyleeに感謝)

:これは非公式のパッチであり、Fancyboxの作者によってサポートされていませんが、現状では機能します。自己責任で使用してください;)

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


1
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.jsにあるGoogle Ajax Libraries API CDNからプルした後、同じ問題が発生しました。これにより、1.9.0の最新のjQueryリリースが取得され、問題が発生します。v1.8.3リリースをプルダウンし、ローカルWebサーバーでそれをポイントすると、すべてが修正されました。明らかに、CDNを使用したいと思いますが、スライダーとホバーメニューを壊すという犠牲はありません。
JPC 2013年

なぜ正規表現が書かれているの/msie [6]/iですか?-文字クラス[6]とまったく同じです文字 6すなわち括弧なし、。それはコードへの大きな自信には
つながり

1
@ZrajmCAkfohg:私は通常、IEのバージョン6から8までを検証しているため[6-8]、この場合はのよう[6]になりましたが、最後は構文規則にすぎません。とにかく、それらが「まったく同じ」である場合、これはコードの信頼性にどのように影響しますか?ブラケットの有無による結果が異なり、混乱の余地がある場合、私はあなたに同意します。そうでない場合、「...自信を刺激しない」というコメントは非常に建設的ではありません。私はむしろあなた自身の「自信を鼓舞する」答えを投稿することを勧めます。
JFK 2013

1
ただし、FancyBoxをもう一度開く問題は修正されません...このサンプルページは
Anders

1
@basZero:それらは完全に異なる問題です。あなたが説明するものについては、groups.google.com / forum /#!topic / fancybox / -re22BoXOzMをチェックしてくださいそれが役立つ場合
JFK

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>

沿って :

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

あなたのページとその働きで。


+1面白い。いずれの場合も、バージョンをロールバックするか、レガシーコードのパッチを適用するために、システムを編集する必要があります。
JFK 2013年

パッチ(jquery-migrate)を適用しても、fancybox-1.3.4、jquery-1.11.3、jquery-migrate-1.2.1でこの問題を解決するのに役立ちません...アップグレードする必要なしに、これに対するパッチソリューションはありますか?非フリーのFancybox2に?
basZero 2015

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

4
JFKの回答からのパッチ適用手順だけでは、インラインボックスをもう一度開こうとしたときにまだ問題があり、常に「要求されたコンテンツをロードできません。後でもう一度やり直してください。」というエラーメッセージが表示されました。コンテンツの代わりに、最初の試行で適切に表示されました。(あまり明確ではない)追加パッチを使用すると、最終的に機能します。
Gurken Papst 2013

1
jQuery 1.10.2でこのソリューションを試したところ、うまくいくようです。私も同意しますが、この回答の「パッチ」を理解することは明白ではありません。
Daze、2013

これは、新しいバージョンのJQueryを必要とする、古いバージョンのFancyboxで困っている人にとっては素晴らしいソリューションです。私が遭遇していたいくつかの非常に厄介なバグを修正しました。
glenatron 2014

4
誰もがパッチを適用するトラブルがある場合は、ここで編集したファイルです:pastebin.com/9R2VFVBQ
dloewen

4

まだ誰かがjQuery 3.0+でレガシーfancyboxをサポートする必要がある場合に備えて、次の変更が必要です。

.unbind()非推奨

のすべてのインスタンス.unbind.off

.removeAttribute()は関数ではありません

.removeAttr()代わりにjQueryを使用するように580-581行を変更します。

古いコード:

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

新しいコード:

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

これを上記の他のパッチと組み合わせると、互換性の問題が解決しました。


このステートメントをどのように修正しますか?b.showNavArrows?((b.cyclic && 1 <h.length || 0!== s)&& y.show()、(b.cyclic && 1 <h.length || s!= h.length-1)&& z.show( )):( y.hide()、z.hide())}、M = function(){a.support.opacity ||(p.get(0).style.removeAttribute( "filter")、f。 get(0).style.removeAttribute( "filter"))
Knocks X
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.