Fancybox가 jQuery v1.9.0에서 작동하지 않음 [f.browser가 정의되지 않음/'msie' 속성을 읽을 수 없음]
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>
기존의 팬시박스 구현은 모두 실패합니다!!
여기 보고된 jQuery: http://bugs.jquery.com/ticket/13183 에서 팬시박스 스크립트를 깨는 버그가 존재하는 것 같습니다.
추가 참조는 https://github.com/fancyapps/fancyBox/issues/485 에서도 확인할 수 있습니다.
해결 방법으로 jQuery 버그가 수정되거나 Fancybox가 패치된 상태에서 jQuery v1.8.3으로 롤백합니다.
업데이트(2013년 1월 16일):Fancybox v2.1.4가 출시되었으며 이제 jQuery v1.9.0과 잘 작동합니다.
팬시박스 v1.3.4의 경우 - 다음으로 롤백해야 합니다.jQuery v1.8.3 또는 다음을 적용합니다.@Manu의 답변에 의해 지적된 마이그레이션 스크립트.
업데이트(2013년 1월 17일):Fancbox v1.3.4 사용자를 위한 해결 방법:
다음과 같이 jQuery v1.9.0과 함께 작동하도록 fancybox js 파일을 패치합니다.
- 텍스트/html 편집기를 사용하여 jquery.fancybox-1.3.4.js 파일(팩 버전이 아닌 전체 버전)을 엽니다.
29번 선 주변에 다음과 같이 적혀 있는 것을 찾아보십시오.
isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
다음으로 대체합니다(2013년 3월 19일 편집: 보다 정확한 필터).
isIE6 = navigator.userAgent.match(/msie [6]/i) && !window.XMLHttpRequest,
업데이트(2013년 3월 19일):또한 교체
$.browser.msie
타고navigator.userAgent.match(/msie [6]/i)
라인 615 주변(및/또는 모두 교체)$.browser.msie
예를 들어), 감사합니다...바로 그거야!
또는 여기에서 이미 패치가 적용된 버전을 다운로드하십시오(2013년 3월 19일 업데이트... 추가 마감 브래킷을 알려주셔서 감사합니다).
참고: 이 패치는 비공식 패치이며 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
대체:
<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+에서 레거시 팬시박스를 계속 지원해야 하는 경우 다음과 같이 변경해야 합니다.
.unbind가 더 이상 사용되지 않습니다.
인바스기의 모든 바꾸기.unbind
와 함께.off
.removeAttribute()는 함수가 아닙니다.
jQuery's 580-581을 합니다..removeAttr()
대신:
이전 코드:
580: content[0].style.removeAttribute('filter');
581: wrap[0].style.removeAttribute('filter');
새 코드:
580: content.removeAttr('filter');
581: wrap.removeAttr('filter');
이것은 위에 언급된 다른 패치와 결합되어 저의 호환성 문제를 해결했습니다.
언급URL : https://stackoverflow.com/questions/14344289/fancybox-doesnt-work-with-jquery-v1-9-0-f-browser-is-undefined-cannot-read
'source' 카테고리의 다른 글
쿼리를 콘솔 대신 추적 또는 디버그로 출력하도록 Fluent NHibernate를 구성하는 방법은 무엇입니까? (0) | 2023.08.24 |
---|---|
텍스트 너비 계산 (0) | 2023.08.24 |
iTunes Connect에서 앱 삭제 (0) | 2023.08.24 |
ASP 버튼 안에 있는 멋진 글꼴 (0) | 2023.08.24 |
numpy 배열 대신 팬더와 sklearn fit_transform을 사용하고 데이터 프레임을 반환하는 방법은 무엇입니까? (0) | 2023.08.24 |