Fancybox, jQuery v1.9.0 ile çalışmıyor [örn. Tarayıcı tanımsız / 'msie' özelliği okunamıyor]


100

Fancybox, yeni jQuery v1.9.0 ile son buluyor.

Hem Fancybox v1.3.4 hem de altı - ve - v2.1.3 ve daha eski sürümleri etkiler.

Gösterilen hatalar şunlardır:

sürüm 1.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

... diğer hatalar

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'te:

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'yi aramak için bunu kullanıyorsanız:

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

... mevcut fantezi kutusu uygulamalarınızdan herhangi biri başarısız olur !!


27
İşte bu yüzden üretimde asla ve asla kullanmamalısınız jquery-latest.js!
jrummell

1
fancybox 2.1.5'in
Mukesh

Yanıtlar:


199

Görünüşe göre jQuery'de burada rapor edilen bir hata var: http://bugs.jquery.com/ticket/13183 Fancybox betiğini bozan.

Ayrıca daha fazla referans için https://github.com/fancyapps/fancyBox/issues/485 adresini kontrol edin .

Geçici bir çözüm olarak, jQuery hatası düzeltildiğinde veya Fancybox yamalıyken jQuery v1.8.3'e geri dönün.


GÜNCELLEME (16 Ocak 2013): Fancybox v2.1.4 yayınlandı ve şimdi jQuery v1.9.0 ile sorunsuz çalışıyor.

Fancybox v1.3.4 için - yine de jQuery v1.8.3'e geri dönmeniz veya @ Mani'nin cevabında belirtildiği gibi geçiş komut dosyasını uygulamanız gerekir .


GÜNCELLEME (17 Ocak 2013): Fancybox v1.3.4 kullanıcıları için geçici çözüm :

JQuery v1.9.0 ile çalışmasını sağlamak için fancybox js dosyasını aşağıdaki gibi yamalayın:

  1. jquery.fancybox-1.3.4.js dosyası (tam sürüm, değil versiyonunu paketi bir metin / html editörü ile).
  2. 29. satırın etrafında şunu yazın:

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

    ve (bunu yerine REDAKTE : daha doğru filtre 19 Mart 2013):

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

    GÜNCELLEME (19 Mart 2013): Ayrıca yerine $.browser.msiegöre navigator.userAgent.match(/msie [6]/i)hat 615 civarında (ve / veya tamamının yerini $.browser.msieteşekkürler, varsa örneklerini) joofow ... o kadar!

Veya zaten yamalanmış sürümü BURADAN indirin (19 Mart 2013 GÜNCELLENDİ ... ekstra kapanış parantezini işaret ettiği için fairylee'ye teşekkürler )

NOT : Bu resmi olmayan bir yamadır ve Fancybox'ın yazarı tarafından desteklenmez, ancak olduğu gibi çalışır. Kendi sorumluluğunuzda kullanabilirsiniz;)

İsteğe bağlı olarak, jQuery v1.8.3'e geri dönebilir veya @ Mani'nin cevabında belirtildiği gibi geçiş komut dosyasını uygulayabilirsiniz .


1
Ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js adresindeki Google Ajax Kitaplıkları API CDN'sinden aldıktan sonra da aynı sorunu yaşadım . Bu, 1.9.0'ın en son jQuery sürümünü çeker ve sorun ortaya çıkar. V1.8.3 sürümünü indirdik ve yerel web sunucusunda ona işaret ettik ve şimdi her şey düzeltildi. Açıkçası, CDN'yi kullanmak istiyoruz, ancak kaydırıcılarımızı bozma ve menülerimizi gezdirme pahasına değil.
JPC

Normal ifade neden yazılıyor /msie [6]/i? - karakter sınıfı [6]ile tamamen aynıdır karakteri 6 parantez olmadan yani. Bu kodlara pek güven vermiyor…: /
zrajm

1
@ZrajmCAkfohg: Sanırım normalde IE sürümlerini 6'dan 8'e kadar doğruladığım için [6-8]ve bu durumda [6], sonunda sadece bir sözdizimi kuralı olduğu gibi gitti . Her neyse, eğer "tam olarak eşdeğer" iseler, bu koda olan güveni nasıl etkiler?!?! Eğer parantezli veya parantezsiz sonuç farklıysa ve bu kafa karışıklığına yer açıyorsa, o zaman size katılıyorum, aksi takdirde "... güven vermiyor ..." yorumunuzu hiç de yapıcı görmüyorum. Sizi kendi "güven uyandıran" cevabınızı göndermeyi tercih ederim.
JFK

1
Bu, FancyBox'ı ikinci kez açmayla ilgili sorunu çözmez
Anders

1
@basZero: bunlar tamamen farklı konular. Açıkladığınız biri için, groups.google.com/forum/#!topic/fancybox/-re22BoXOzM adresini kontrol edin, eğer yardımcı olacaksa
JFK

28

Merhaba bu, jQuery'nin yeni sürümünden kaynaklanıyor => 1.9.0

güncellemeyi kontrol edebilirsiniz: http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/

jQuery.Browser kullanımdan kaldırıldı. bir geçiş komut dosyası ekleyerek en son sürümü koruyabilirsiniz: http://code.jquery.com/jquery-migrate-1.0.0.js

değiştirin:

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

tarafından :

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

sayfanızda ve çalışıyor.


+1 İlginç. Her durumda, sistemlerimizi geri alma sürümünü yapmak veya eski kod için yamayı uygulamak için düzenlememiz gerekir.
JFK

Yamayı uygulamak (jquery-migrate) bu sorunu fancybox-1.3.4, jquery-1.11.3 ve jquery-migrate-1.2.1 ile çözmeye yardımcı olmaz ... Yükseltmeye gerek kalmadan buna yama çözümleri var mı? ücretsiz Fancybox2'ye?
basZero

19

Küresel olaylar da kullanımdan kaldırıldı.

İşte tarayıcı ve olay sorunlarını düzelten bir yama:

--- 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
Yalnızca JFK'nin yanıtından gelen yama talimatlarıyla, bir satır içi kutuyu ikinci kez açmaya çalıştığımda hala sorunlar yaşadım ve her zaman "İstenen içerik yüklenemiyor. Lütfen daha sonra tekrar deneyin." Hata mesajını gösteriyorum. İlk denemede düzgün bir şekilde görüntülenen içerik yerine. (Çok açık olmayan) ek yamalarınızı kullanarak nihayet işe yarıyor.
Gurken Papst

1
Bu çözümü jQuery 1.10.2 ile denedim ve işe yarıyor gibi görünüyor. Ben de hemfikir olsam da, bu yanıttaki "yama" yı anlamanın açık olmadığı.
Daze

Bu, Fancybox'ın eski bir sürümüne takılıp kalan ve yeni bir JQuery sürümüne ihtiyaç duyan herkes için harika bir çözümdür. Karşılaştığım bazı kafa karıştırıcı hatalar düzeltildi.
glenatron

4
Herhangi biri yamayı uygulamada sorun
yaşıyorsa

4

Birinin hala jQuery 3.0+ ile eski fancybox'ı desteklemesi gerekiyorsa, yapmanız gereken diğer değişiklikler şunlardır:

.unbind () kullanımdan kaldırıldı

Tüm örneklerini .unbindile değiştir.off

.removeAttribute () bir işlev değil

JQuery'leri kullanmak için 580-581 satırlarını değiştirin .removeAttr()Bunun yerine :

Eski kod:

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

Yeni kod:

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

Bu, yukarıda bahsedilen diğer yama ile birleştirildiğinde uyumluluk sorunlarımı çözdü.


Bu ifadeyi nasıl düzeltirsiniz? 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 ("filtre"), f. olsun (0) .style.removeAttribute ( "filtre"))
Seriyor X
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.