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

1
fancybox 2.1.5의 최신 버전을 사용 fancyapps.com/fancybox
무 케시

답변:


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,

    과 (에 의해 대체 EDITED :보다 정확한 필터 2013년 3월 19일) :

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

    UPDATE (3 월 (19) 2013 년) : 또한 교체 $.browser.msienavigator.userAgent.match(/msie [6]/i)라인 (615)의 주위에 (그리고 / 또는 모든 대체 $.browser.msie감사가있는 경우 인스턴스를) joofow ... 바로 그거야!

또는 여기에서 이미 패치 된 버전 다운로드하십시오 (2013 년 3 월 19 일 업데이트 됨 ... 추가 닫는 괄호를 지적 해 주신 fairylee 에게 감사드립니다 )

참고 : 이것은 비공식 패치이며 Fancybox의 작성자가 지원하지 않지만 그대로 작동합니다. 자신의 책임하에 사용할 수 있습니다.)

선택적으로 jQuery v1.8.3으로 롤백 하거나 @Manu 의 답변에서 지적한대로 마이그레이션 스크립트 를 적용 할 수 있습니다 .


1
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js 의 Google Ajax Libraries API CDN에서 가져온 후에도 동일한 문제가 발생 했습니다 . 이것은 1.9.0의 최신 jQuery 릴리스를 가져오고 문제가 발생합니다. v1.8.3 릴리스를 가져와 로컬 웹 서버에서 가리키고 모든 것이 이제 수정되었습니다. 분명히 우리는 CDN을 사용하고 싶지만 슬라이더와 호버 메뉴를 깨뜨리는 비용을 들이지 않습니다.
JPC

정규식이 작성된 이유는 무엇 /msie [6]/i입니까? -문자 클래스 [6]는 괄호없이 문자 와 정확히 동일합니다 6. 즉 ... 코드에서 매우 자신감을 고취하지 않습니다 /
zrajm

1
@ZrajmCAkfohg : 나는 일반적으로 IE 버전을 6에서 8까지 유효성을 검사하기 때문에 추측합니다 [6-8].이 경우에는 그냥 [6]. 어쨌든, 그들이 "정확히 동등하다"면, 이것이 코드의 신뢰에 어떤 영향을 미칩니 까?!?! 괄호를 사용하거나 사용하지 않은 결과가 다르고 혼란의 여지가 있다면 동의합니다. 그렇지 않으면 "... 자신감을 불러 일으키지 않습니다 ..."라는 의견이 전혀 건설적인 것으로 보이지 않습니다. "자신감을 불러 일으키는"자신 만의 답변을 게시하는 것이 좋습니다.
JFK

1
그래도 FancyBox를 두 번 여는 문제는 해결되지 않습니다 ... 여기 샘플 페이지를 참조하십시오. wasen.net/testjq1.10.2.html
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

패치 (jquery-migrate)를 적용해도 fancybox-1.3.4, jquery-1.11.3 및 jquery-migrate-1.2.1에서이 문제를 해결하는 데 도움이되지 않습니다. 업그레이드 할 필요없이 이에 대한 패치 솔루션이 있습니까? 무료가 아닌 Fancybox2에?
basZero

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

이것은 새로운 버전의 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.