फैंसीबॉक्स jQuery v1.9.0 के साथ काम नहीं करता है [f.browser अपरिभाषित है / संपत्ति नहीं पढ़ सकता है 'msie']


100

नए jQuery v1.9.0 के साथ फैंसीबॉक्स टूट जाता है।

यह फैंसीबॉक्स 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>

... आपके किसी भी मौजूदा फैंसीबॉक्स कार्यान्वयन विफल हो जाएंगे !!


27
और यही कारण है कि आपको कभी भीjquery-latest.js उत्पादन में उपयोग नहीं करना चाहिए !
jrummell

जवाबों:


199

ऐसा लगता है कि यह यहां बताए गए jQuery में एक बग मौजूद है: http://bugs.jquery.com/ticket/13183 जो फॉक्सबॉक्स स्क्रिप्ट को तोड़ता है।

आगे के संदर्भ के लिए https://github.com/fancyapps/fancyBox/issues/485 भी देखें

वर्कअराउंड के रूप में, jQuery v1.8.3 पर रोलबैक करें, जबकि या तो jQuery बग फिक्स हो या फैंसीबॉक्स पैच हो।


अद्यतन (16 जनवरी 2013): फैंसीबॉक्स v2.1.4 जारी किया गया है और अब यह jQuery v1.9.0 के साथ ठीक काम करता है।

फैंसीबॉक्स v1.3.4- के लिए आपको अभी भी jQuery v1.8.3 को रोलबैक करना होगा या @ मनु के उत्तर द्वारा बताई गई माइग्रेशन स्क्रिप्ट को लागू करना होगा ।


अद्यतन (जनवरी 17, 2013): फैंसीबॉक्स v1.3.4 के उपयोगकर्ताओं के लिए समाधान :

निम्नलिखित के रूप में jQuery v1.9.0 के साथ काम करने के लिए फैंसीबॉक्स js फ़ाइल को पैच करें:

  1. एक पाठ / html संपादक के साथ jquery.fancybox-1.3.4.js फ़ाइल (पूर्ण संस्करण, पैक संस्करण नहीं ) खोलें ।
  2. लाइन 29 के आसपास खोजें जहाँ यह कहता है:

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

    और इसे बदलें ( EDITED 19 मार्च, 2013: अधिक सटीक फ़िल्टर):

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

    अद्यतन (19 मार्च, 2013): इसके अलावा बदलने के $.browser.msieद्वारा navigator.userAgent.match(/msie [6]/i)लाइन 615 के आसपास (और / या सभी को बदलने के $.browser.msieउदाहरणों, यदि कोई हो), धन्यवाद joofow ... काम हो गया!

या HERE से पहले से पैच किए गए संस्करण को डाउनलोड करें (19 मार्च 2013 को अपडेट किया गया ... अतिरिक्त कहानी कोष्ठक को इंगित करने के लिए धन्यवाद फेयरली )

नोट : यह एक अनौपचारिक पैच है और फैंसीबॉक्स के लेखक द्वारा असमर्थित है, हालांकि यह जैसा है वैसा ही काम करता है। आप इसे अपने जोखिम पर उपयोग कर सकते हैं;)

वैकल्पिक रूप से, आप jQuery v1.8.3 के बजाय रोलबैक कर सकते हैं या @ मनु के उत्तर द्वारा बताई गई माइग्रेशन स्क्रिप्ट को लागू कर सकते हैं ।


1
Google Ajax लाइब्रेरीज़ API CDN से ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js पर खींचने के बाद मेरे पास एक ही मुद्दा था । यह 1.9.0 की नवीनतम jQuery रिलीज और समस्या फसलों को खींचती है। हमने v1.8.3 रिलीज को नीचे खींच लिया और स्थानीय वेब सर्वर पर इसे इंगित किया और अब सब कुछ तय हो गया है। जाहिर है, हम CDN का उपयोग करना चाहते हैं, लेकिन हमारे स्लाइडर्स और होवर मेनू को तोड़ने की कीमत पर नहीं।
जेपीसी

रेगेक्स क्यों लिखा जाता है /msie [6]/i? - चरित्र वर्ग [6]बिल्कुल के बराबर है चरित्र 6 , यानी कोष्ठक के बिना। यह कोड में बहुत अधिक आत्मविश्वास को प्रेरित नहीं करता है: ... /
zrajm

1
@ZrajmCAkfohg: मेरा अनुमान है क्योंकि मैं सामान्यतः IE संस्करणों को 6 से 8 तक मान्य करता हूं [6-8]और इस मामले में यह ठीक वैसे ही चला गया [6], जैसे अंत में सिर्फ एक वाक्य रचना सम्मेलन है। वैसे भी, यदि वे "बिल्कुल समकक्ष" हैं, तो यह कोड में विश्वास को कैसे प्रभावित करता है?!? यदि कोष्ठक के साथ या बिना परिणाम अलग था और इससे भ्रम की स्थिति बनती है, तो मैं आपसे सहमत होता, अन्यथा मैं आपका "... विश्वास नहीं जगाता ..." बहुत रचनात्मक टिप्पणी करता। मैं आपको अपना "आत्मविश्वास-प्रेरक" उत्तर पोस्ट करने के लिए प्रोत्साहित करूंगा।
JFK

1
हालांकि यह दूसरी बार फैंसीबॉक्स
एंडर्स

1
@basZero: वे पूरी तरह से अलग मुद्दे हैं। यदि आप चेक ग्रुपों का वर्णन करते हैं। Googleforum/# ​​.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- माइग्रेट) को लागू करना इस समस्या को फैंसीबॉक्स-1.3.4, jquery-1.11.3 और jquery-migrate-1.2.1 के साथ हल करने में मदद नहीं करता है ... क्या नवीनीकरण करने की आवश्यकता के बिना इसके लिए कोई पैचिंग समाधान हैं? गैर-फ्री फैंसीबॉक्स 2 के लिए?
बेसजेरो

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 के उत्तर से पैचिंग निर्देशों के साथ, मेरे पास अभी भी समस्याएं थीं जब मैंने दूसरी बार एक इनलाइन बॉक्स खोलने की कोशिश की, हमेशा त्रुटि संदेश दिखाते हुए कहा "अनुरोधित सामग्री लोड नहीं की जा सकती। कृपया बाद में फिर से प्रयास करें।" सामग्री के बजाय, वह पहले प्रयास में ठीक से प्रदर्शित किया गया था। अपने (इतना स्पष्ट नहीं) अतिरिक्त पैच का उपयोग करके यह अंततः काम करता है।
गुरकेन पापस्ट

1
बस jQuery 1.10.2 के साथ इस समाधान की कोशिश की और यह काम करने लगता है। हालांकि मैं भी मानता हूं कि इस उत्तर में "पैच" को समझना स्पष्ट नहीं है।
डेज़

यह फैंसीबॉक्स के पुराने संस्करण के साथ अटके हुए किसी भी व्यक्ति के लिए एक बढ़िया समाधान है, जिसे JQuery के नए संस्करण की आवश्यकता है। कुछ बहुत ही खराब बगों को सुलझाया जो मैं चला रहा था।
ग्लेनट्रॉन

4
अगर किसी को पैच लगाने में परेशानी होती है, तो संपादन के साथ फाइल यहाँ है: pastebin.com/9R2VFVBQ
dloewen

4

यदि किसी को अभी भी jQuery 3.0+ के साथ विरासत फैंसीबॉक्स का समर्थन करना है, तो यहां कुछ और बदलाव करने होंगे:

.unbind () पदावनत

के सभी बदल दें .unbindसाथ.off

.removeAttribute () कोई फ़ंक्शन नहीं है

JQuery के .removeAttr()बजाय उपयोग करने के लिए लाइनें 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 ())}, एम () {a.support.opacity || (p.get (0) .style.removeAttribute ( "फिल्टर"), एफ = कार्य करते हैं। मिल (0) .style.removeAttribute ( "फिल्टर"))
दस्तक देता एक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.