2016-01-04 13 views
7

के साथ संगत है या नहीं, मेरे पास जेएस पुस्तकालयों का एक बड़ा हिस्सा है जिसे मुझे वास्तव में पुराना और पुराना होने के बाद फिर से लिखना चाहिए। इसलिए, मैंने एक समाधान के साथ आने का फैसला किया जहां मैं ES2015 सुविधाओं का उपयोग केवल rest parameters जैसी सुविधाओं का उपयोग करूंगा।यह पता लगाने के लिए कि ब्राउज़र ES2015

बात यह है कि, मुझे यकीन है कि सभी ग्राहकों के पास अपने ब्राउज़र का अद्यतित नहीं होगा और मैं उलझन में हूं कि क्या मुझे अपने ब्राउज़र के बारे में किसी भी मुद्दे का सामना करना होगा, जो मेरे नए जेएस लिब के साथ संगत है।

तो, मैं सोच रहा था कि क्या मैं यह पता लगा सकता हूं कि क्लाइंट ब्राउज़र ES2015 के साथ संगत हैं या नहीं। और यदि नहीं, तो मैं बस अपनी पुरानी जेएस लाइब्रेरी शामिल करूंगा।

मैं Conditional comments जैसे समाधान की तलाश में हूं, लेकिन मुझे समाधान के लिए कहीं भी नहीं मिल रहा है।

एचटीएमएल, जेएस या पीएचपी में कोई मदद की सराहना की जाती है। कृपया अपनी सलाह का सुझाव दें।

+3

अभी के लिए * पूरे * ES2015 के साथ कोई ब्राउज़र संगत नहीं है। Https://kangax.github.io/compat-table/es6/ –

+2

अच्छा प्रश्न देखें। शुरुआत करने वालों के लिए, मुझे लगता है कि यह निर्भरता प्रबंधक कॉन्फ़िगरेशन के रूप में सर्वोत्तम रूप से लागू किया जाएगा ताकि यह एक स्क्रिप्ट का वैकल्पिक संस्करण लोड कर सके। पहचान के लिए, मुझे आश्चर्य है कि सबसे आसान तरीका 'eval ("फ़ंक्शन (ए, बी, ... तर्क) {}");', और वाक्यविन्यास त्रुटि की जांच करने जैसा कुछ होगा। निश्चित रूप से एक अनुस्मारक, कि "eval बुरा है", लेकिन यदि आप केवल एक सटीक इनलाइन स्ट्रिंग के लिए इसका उपयोग करने के लिए ध्यान में रखते हैं तो यह थोड़ा सुरक्षित हो सकता है। – Katana314

+1

बहुत सी ES6 सुविधाओं को आसानी से पॉलीफ़िल्ड नहीं किया जा सकता है क्योंकि यह नया सिंटेक्स है, इसलिए आपको अपने सभी कोड के दो संस्करणों की आवश्यकता होगी; एक ईएस 6 संस्करण और एक विरासत संस्करण (शायद बेबेल का उपयोग कर ES6 संस्करण से संकलित?)। फीचर डिटेक्शन को 'try..catch' में किया जाना चाहिए क्योंकि अगर यह समर्थित नहीं है ** ** ** त्रुटियों को फेंक देगा। इसके बजाए आप इसके बजाय शिम्स के साथ कोड को ईएस 5 तक ला सकते हैं, जिसका मतलब होगा कि आपके पास एक कोड बेस है। –

उत्तर

3

मैं सोच रहा था कि क्या क्लाइंट ब्राउज़र ES2015 के साथ संगत है या नहीं। और यदि नहीं, तो मैं बस अपना पुराना जेएस लाइब्रेरी शामिल करूंगा।

आप ऐसा नहीं कर सकते हैं, क्योंकि एएफएकेके में ऐसा कोई ब्राउज़र नहीं है जो ES2015 का पूरी तरह से समर्थन करता है। साथ ही, आप वास्तव में अपने कोड के दो अलग-अलग संस्करणों को बनाए रखना नहीं चाहते हैं, क्योंकि यह दर्दनाक है और यह वास्तव में गन्दा हो सकता है।

आजकल दृष्टिकोण ट्रांस्पर का उपयोग करना है, जो कि एक कंपाइलर है जो आपके ES2015 कोड को ईएस 5 (जावास्क्रिप्ट जो हर ब्राउज़र जानता है) को संकलित करता है। यह अभी भी गन्दा है, लेकिन कम से कम आप अपने कोड का केवल एक संस्करण लिखना चाहते हैं, और यह ES2015 है।

मुझे लगता है कि Babel (पूर्व में 6to5) सबसे लोकप्रिय ट्रांसलेटर है। आप शुरू करने के लिए अपनी वेबसाइट देख सकते हैं।


अपने वास्तविक सवाल का जवाब देने के रूप में,

यदि ब्राउज़र है कि कई मायनों में

आप क्या कर सकते हैं ES2015

के साथ संगत है कैसे पता लगाने के लिए। मुझे यकीन है कि क्या सबसे विश्वसनीय एक हो सकता है नहीं कर रहा हूँ, लेकिन उदाहरण के लिए आप बस अपने ब्राउज़र की कंसोल पर कोशिश कर सकते: इस बयान देता है

'Promise' in window 

तो true, तो मौजूदा ब्राउज़र वादों का समर्थन करता है, जो एक नई सुविधा है ES2015 का, तो आप यह मान सकते हैं कि यह ES2015 की अधिकांश सुविधाओं का समर्थन करता है।

हालांकि अधिकांश मामलों के लिए यह पर्याप्त नहीं है; आप 100% सुनिश्चित करना चाहते हैं कि आप जो भी उपयोग कर रहे हैं वह किसी भी पुराने ब्राउज़र में SyntaxError फेंकने वाला नहीं है।

एक समाधान हो सकता है कि आप जिस सुविधा का उपयोग करना चाहते हैं उसके लिए मैन्युअल रूप से जांचें। उदाहरण के लिए, यदि आप लायें एपीआई की जरूरत है, तो आप एक समारोह है कि आपको बताता है कि मौजूदा ब्राउज़र इसका समर्थन करता है, तो बना सकते हैं:

function isFetchAPIsupported() { 
    return 'fetch' in window; 
} 

आप किसी भी नए API आप की जरूरत के लिए यह कर सकते हैं।हालांकि, अगर आपको कुछ सिंटैक्टिक रूप से अलग-अलग चाहिए, तो मुझे लगता है कि आपकी एकमात्र शर्त eval() है (जैसा कि कटाना 314 सुझाया गया है)। उदाहरण के लिए, शेष पैरामीटर के लिए समर्थन की जांच करने के लिए आप कर सकते हैं:

function isRestSupported() { 
    try { 
     eval('function foo(bar, ...rest) { return 1; };'); 
    } catch (error) { 
     return false; 
    } 
    return true; 
} 

यह फ़ायरफ़ॉक्स में बहुत अच्छा काम करता है, क्योंकि बाकी पैरामीटर समर्थित हैं। यह सफारी पर भी काम करता है, false लौटाता है क्योंकि बाकी पैरामीटर अभी तक समर्थित नहीं हैं।

+4

* यदि यह कथन सत्य देता है, तो ब्राउज़र ES2015 के साथ "संगत" है। * यह गलत है। इसका मतलब केवल ब्राउज़र ही मूल वादे प्रदान करता है। –

+0

यदि 'isRestSupported' वापस 'सत्य' लौटाया गया तो आप क्या करेंगे? एक असमर्थित ब्राउज़र में आराम वाक्यविन्यास का उपयोग करना एक वाक्यविन्यास त्रुटि फेंकने जा रहा है जब – CodingIntrigue

+0

@RGraham से अधिक निष्पादित किए जाने के बजाय * पार्स * * मेरी टिप्पणी में, मैंने उल्लेख किया है कि एक निर्भरता प्रबंधक को इसके लिए कॉन्फ़िगर करना होगा। उदाहरण के लिए, 'partOfApp.js' और' partOfApp_ES5.js'। उत्तरार्द्ध बस एक चेतावनी कह सकता है कि "एक नया ब्राउज़र प्राप्त करें, हिक!" अगर यह एक आम-पहुंच साइट नहीं है। – Katana314

संबंधित मुद्दे