2012-11-30 25 views
7

मैंने उन पृष्ठों को देखा है जो ज़िप्टो से jQuery (विशेष रूप से आईई के लिए) से गिरने के लिए निर्देश देते हैं या पूछते हैं, here on SO और यहां Zepto.js official page पर।
मैंने Modernizr.load doc page में Google- होस्टेड jQuery से स्थानीय साइट jQuery पर फ़ॉलबैक करने के उदाहरणों को भी देखा है।ज़ेप्टो से Google सीडीएन jQuery, स्थानीय jQuery में कैसे फॉलबैक करें?

मेरा सवाल है, मैं दोनों चीजों को एक साथ कैसे रखूं? संभवतः Modernizr.load का उपयोग किये बिना, उचित <script> ब्लॉक का उपयोग कर?

यहां मैं क्या आया, लेकिन ऐसा लगता है कि आईई को Google होस्टेड संस्करण कभी नहीं मिला। साथ ही, मुझे यकीन नहीं है कि Zepto = jQuery असाइनमेंट ठीक से काम करता है।

<script> 
    document.write('<script src=' + 
     ('__proto__' in {} ? 
      'js/vendor/zepto.min' : 
      'https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min') + 
     '.js><\/script>'); 
</script> 
<script> 
    if (window.jQuery) { 
     window.Zepto = window.jQuery; /* let jQuery alias Zepto */ 
    } 
    else 
    { /* here jQuery could be rightly undefined because Zepto is loaded, 
     so this could be wrong. */ 
     document.write('<script src=' + 
      'js/vendor/jquery-1.8.0.min' + 
      '.js><\/script>'); 
    } 
</script> 
<script> 
    if (window.jQuery) { 
     window.Zepto = window.jQuery; /* let jQuery alias Zepto */ 
    } 
    else 
    { 
     /* same problem as before */ 
     console.error('Zepto nor jQuery available!'); 
    } 
</script> 

क्या कोई बेहतर तरीका है?

<!-- Load local Zepto.js or (as a fallback) jQuery from Google CDN or (as a fallback) local jQuery --> 
<script> 
    document.write('<script src="' + ('__proto__' in {} ? 
     'js/vendor/zepto' : 
     'http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery') + 
     '.min.js"><\/script>') 
</script> 
<script> 
    window.Zepto || window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>'); 
</script> 

मैं के लिए के रूप में गूगल CDN के प्रोटोकॉल-कम/योजना कम URL का उपयोग नहीं कर सकता है: प्रादेशिक सेना

संपादित

@Ashfame जवाब के बाद, इस मैं क्या उपयोग किया है है कुछ कारण यह मेरे स्थानीय आईई 9 पर काम नहीं करता है (यह बहुत इंतजार करता है, फिर हमेशा स्थानीय पर वापस आ जाता है)।

मैंने Zepto को jQuery के साथ अलिया नहीं किया: जेएस कोड में $ का उपयोग किया गया।

मुझे w.r.t. से jQuery लोडिंग से संबंधित किसी भी समस्या का अनुभव नहीं होता है। आश्रित कोड।

+0

मैंने '//ajax.googleapis.com/... 'के साथ भी कोशिश की है, जो प्रोटोकॉल उपसर्ग के बिना है – superjos

+0

शायद [इस स्निपेट] (https://gist.github.com/3325940) के साथ भी प्रयास किया गया है उपयोगकर्ता @ सेबेस्टियन ग्रोसिएन द्वारा - जेनकोकून: यह ठीक काम करने लग रहा था, लेकिन फिर मैं क्लाउडफ्लेयर सीडीएन, और न ही किसी अन्य ज़िप्टो सीडीएन का उपयोग नहीं करना चाहता था। – superjos

+0

ने 'Modernizr.load' के साथ भी प्रयास किया, लेकिन किसी भी तरह से यह उद्देश्य के लिए थोड़ा अधिक लग रहा था। बेशक मेरे द्वारा गलती हो सकती है। – superjos

उत्तर

6

इस तकनीक को आजमाने के लिए, मैं यह पहली कोशिश करेंगे:

मैं जल्दी कैसे एचटीएमएल 5 बॉयलरप्लेट एक स्थानीय वापस आने पर लोड होता है jQuery CDN नीचे है की रेखा के साथ यह लिखा।

यह काम नहीं कर सकता है, लेकिन मुझे कोई कारण नहीं दिख रहा है कि यह अभी क्यों नहीं होना चाहिए। इसे एक स्पिन देना चाहते हैं? उपयोगकर्ता एक ही समय jQuery CDN नीचे है पर आईई & की तरह एक गैर zepto संगत ब्राउज़र पर तब होता है जब

<script>document.write('<script src="' + ('__proto__' in {} ? 'cdn/zepto.min' : 'cdn/jquery.min') + '.js">\x3Cscript>');</script> 
<script>window.Zepto || window.jQuery || document.write('<script src="cdn/jquery.min.js">\x3C/script>')</script> 
<script>window.Zepto || window.jQuery || document.write('<script src="local/jquery.min.js">\x3C/script>')</script> 

केवल मामला यह अच्छी तरह से संभाल नहीं होगा, तो यह फिर से jQuery CDN लोड करने की कोशिश करेंगे एक बार और फिर आखिरकार jQuery की स्थानीय प्रतिलिपि पर फ़ॉलबैक।


लेकिन व्यावहारिक रूप से, अगर मैं इसे लागू करना चाहता हूं, तो मेरे पास स्थानीय रूप से 1 एकल फॉलबैक होगा। यह जांचने की कोशिश करें कि क्या हम ज़िप्टो, या jQuery लोड कर सकते हैं, और अगले चरण में, यदि उनमें से कोई भी लोड नहीं हुआ था, तो स्थानीय लाइब्रेरी लोड करें। कुछ ऐसा अनुकूलित करने की कोशिश करने के बजाय, जो कुछ हासिल करने में सक्षम नहीं है, उसमें कुछ काम करने के लिए बेहतर है। बुद्धिमानी से अनुकूलित करें! यह बहुत संभव हो सकता है कि उपरोक्त तकनीक # 1 में क्रॉस ब्राउज़र संगतता के अपने स्वयं के कैवेट होंगे।


मैं सिर्फ इस मुद्दे जहां यह कहते हैं, यहां तक ​​कि इस तकनीक (इस्तेमाल किया जा रहा & एचटीएमएल 5 बॉयलरप्लेट & Modernizr द्वारा अनुशंसित) को पता चला विश्वसनीय नहीं है।इस समस्या को जांचें - document.write fallback causing jQuery to load out of order

उस प्रश्न में एक और समाधान पुस्तकालय Yepnope के बारे में बात करता है। आप यह जांच सकते हैं कि यह कैसे काम करता है - https://stackoverflow.com/a/12323328/551713

आखिरकार मैं यह कहकर यह जवाब समाप्त कर दूंगा कि जब तक कि आप ऐसा कुछ नहीं बना रहे हैं जो पूरी तरह से आपका कोड होगा, जैसे कि जंगली में नहीं चल रहा है, इसके उपयोगकर्ता की संभावनाओं के साथ और अधिक सामान जोड़ना पेज, इस बारे में अपने आप को परेशान न करें क्योंकि आप जल्दी से ऐसी तकनीकों के साथ मुद्दों में भाग लेंगे, क्योंकि अन्य स्क्रिप्ट ऑर्डर से बाहर हो सकती है और मुद्दों का कारण बन सकती है, जबकि यदि आपका यह कोड है, तो आप शायद सब कुछ & लोड कर सकते हैं फॉलबैक के अपने तर्क के अनुसार।

+0

आपके उत्तर के लिए धन्यवाद। अंत में मैंने आपके संस्करण का उपयोग किया, लेकिन केवल Google सीडीएन पर डबल प्रयास को हटा दिया। मेरे मामले में: यदि यह पहली बार काम करता है, ठीक है, अन्यथा गति के लिए (सीडीएन का उपयोग करने का मुख्य उद्देश्य) यह सिर्फ स्थानीय jQuery के लिए जाएगा। – superjos