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実装のいずれかが失敗します!!
ここで報告されているjQueryのバグが存在するようです:http://bugs.jquery.com/ticket/1318は、Fancyboxスクリプトを破壊します。
また、詳細なリファレンスについてはhttps://github.com/fancyapps/fancyBox/issues/485も確認してください。
回避策として、jQuery v1.8.にロールバックし、jQueryのバグを修正するか、Fancyboxにパッチを適用します。
UPDATE(2013年1月16日):Fancybox v2.1.4がリリースされ、jQuery v1.9.0で正常に動作するようになりました。
Fancybox v1.3.4-の場合、jQuery v1.8.にロールバックするか、migration scriptを適用する必要があります@Manuの答えで指摘されました。
UPDATE(2013年1月17日):Fancybox v1.3.4のユーザーの回避策:
fancybox js fileにパッチを適用して、次のようにjQuery v1.9.0で動作するようにします。
それが言う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
も615行目でnavigator.userAgent.match(/msie [6]/i)
に置き換えます(および/またはすべての$.browser.msie
インスタンスがあれば置き換えます)、ありがとう joofow ...それでおしまい!
または、既にパッチが適用されたバージョンをダウンロードしますここから(2013年3月19日更新...ありがとう fairylee 余分な閉じ括弧を指摘してくれました)
NOTE:これは非公式のパッチであり、Fancyboxの作者によってサポートされていませんが、そのまま機能します。自己責任で使用してください。
必要に応じて、むしろjQuery v1.8.にロールバックするか、@ Manuの指摘に従ってmigration scriptを適用できます。回答。
こんにちは、これは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>
あなたのページとその動作。
グローバルイベントも廃止されました。
これは、ブラウザとイベントの問題を修正するパッチです。
--- 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();
まだjQuery 3.0+でレガシーfancyboxをサポートする必要がある場合は、他に変更が必要です。
。unbind()非推奨
.unbind
のすべてのインスタンスを.off
に置き換えます
。removeAttribute()は関数ではありません
580-581行を変更して、代わりにjQueryの.removeAttr()
を使用します。
古いコード:
580: content[0].style.removeAttribute('filter');
581: wrap[0].style.removeAttribute('filter');
新しいコード:
580: content.removeAttr('filter');
581: wrap.removeAttr('filter');
上記の他のパッチと組み合わせることで、互換性の問題が解決しました。