5

आईई के लिए जावास्क्रिप्ट सशर्त टिप्पणियों की खोज करते समय, मैंने @cc_on पर ठोकर खाई। ऐसा लगता है कि काम करता है। मैं हो रही है एक "उम्मीद निरंतर" जावास्क्रिप्ट त्रुटि पर !window.XMLHttpRequest/* @ सीसी_ओएन और आईई 6 पहचान

/*@cc_on 
    @if (@_jscript_version > 5.7) 
    document.write("You are using IE8+"); 

    @elif (@_jscript_version == 5.7 && window.XMLHttpRequest) 
    document.write("You are using IE7"); 

    @elif (@_jscript_version == 5.6 || (@_jscript_version == 5.7 && !window.XMLHttpRequest)) 
    document.write("You are using IE6"); 

    @elif (@_jscript_version == 5.5) 
    document.write("You are using IE5.5"); 

    @else 
    document.write("You are using IE5 or older"); 

@end 

@*/ 

मुद्दा है, हालांकि, सशर्त टिप्पणियों पर wikipedia entry, और अधिक मजबूत आईई detections के लिए निम्न कोड प्रदान करता है विशेष रूप से IE6।

स्पष्ट रूप से विकिपीडिया को कुछ मदद की ज़रूरत है, और मुझे यह काम करने की आवश्यकता है। क्या कोई मेरी मदद कर सकता है?

+0

"अधिक मजबूत आईई detections" में मदद करता है? मुझे लगता है कि सशर्त टिप्पणियां आईई पहचान का सबसे मजबूत रूप प्रदान करती हैं। ** ** आईई संस्करण निर्धारित करने के लिए जेस्क्रिप्ट संस्करण पर भरोसा न करें, क्योंकि वे स्वतंत्र हैं। Http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html#c1774947112904387635 के बिंदु 4 देखें इसके अलावा, आपको ब्राउज़र पहचान का उपयोग नहीं करना चाहिए ; सुविधा का पता लगाने का उपयोग करें: http://www.nczonline.net/blog/2009/12/29/feature-detection-is-not-browser-detection/ –

+1

@_jscript_version पहचान केवल तभी उपयोग की जानी चाहिए जब आप के बीच सटीक अंतर जानते हों जेस्क्रिप्ट इंजन के संस्करण और आप किसी भी तरह से उस अंतर को लक्षित करना चाहते हैं - उदाहरण के लिए, एक अनुपलब्ध सुविधा का अनुकरण करें। उदाहरण के लिए, जेएसक्रिप्ट 5.1 में फ़ंक्शन का प्रोटोटाइप कॉल/लागू विधियों को परिभाषित नहीं किया गया था, न ही इसमें Array.prototype.push था। इसलिए यह @_jscript_version का पता लगाना सुरक्षित है और इन सुविधाओं के लिए प्रोग्रामेटिक समर्थन जोड़ें। हालांकि, जैसा कि मार्सेल ने कहा था, यह मानना ​​सुरक्षित नहीं है कि 5.1 मानचित्रों के @_jscript_version IE5.01 पर जाएं क्योंकि आप आसानी से विंडोज अपडेट से जेएसक्रिप्ट अपडेट कर सकते हैं। –

+1

@ विटाली: मैं बहुत ज्यादा नाइटपिक नहीं करना चाहता हूं, लेकिन आपके द्वारा दिए गए उदाहरणों को फीचर डिटेक्शन के साथ परीक्षण किया जा सकता है, इसलिए आपको जावास्क्रिप्ट संस्करण> = 1.3 या कुछ के लिए भी परीक्षण करने की आवश्यकता नहीं है। बस 'if (! Function.prototype.call) {Function.prototype.call = foo का उपयोग करें; } ', आदि, जैसे Oz.js करता है: http://code.google.com/p/oz-js/source/browse/trunk/oz.js#224 –

उत्तर

4

निश्चित रूप से कोई जे एस विशेषज्ञ है, लेकिन कुछ खोजों IE7 से IE6 अलग jscript_version == 5.7 उपयोग करने के लिए इस पाया:

/*@cc_on 
if (@_jscript_version==5.6 || 
    (@_jscript_version==5.7 && 
     navigator.userAgent.toLowerCase().indexOf("msie 6.") != -1)) { 
    //ie6 code 
} 
@*/ 

शायद यह सही दिशा में बात करेंगे।

स्रोत: http://sharovatov.wordpress.com/2009/06/03/efficient-ie-version-targeting/

+0

मैं इसे थोड़ा सा स्पष्ट करना चाहता हूं, लेकिन आप बहुत अधिक सही हैं। यह मुद्दा प्रीकंपिल्ड सशर्त टिप्पणी opperators "@elif" आदि के भीतर सामान्य जावास्क्रिप्ट को कॉल करने का प्रयास करने के लिए निकला। जब आप बस जेस्क्रिप्ट संस्करण को प्रीकंपाइल करते हैं, और पारंपरिक जावास्क्रिप्ट के रूप में बाकी सब कुछ चलाते हैं, तो चीजें संकलित होती हैं और ठीक होती हैं। – Jack

+0

@ मार्सल कोर्पेल - क्या आपने मेरा ब्लॉगपोस्ट पढ़ा है कि जेबिकफोर्ड का जिक्र है? उपयोगकर्ता एजेन्ट चेक का उपयोग किया जाता है * अंदर * सशर्त संकलन ब्लॉक (इसलिए केवल आईईएस पर लागू होता है) और आईई 7 के बीच अंतर निर्धारित करने का कोई अन्य तरीका नहीं है जिसमें विंडोज एक्सपी एसपी 3 पर जेएसक्रिप्ट 5.7 और आईई 6 है जिसमें जेएसक्रिप्ट 5.7 भी है। –

+0

@ विटाली: मुझे यह मानना ​​है कि मैंने आपका लेख नहीं पढ़ा है और मैं अपनी मूल टिप्पणी में थोड़ा कठोर था, जिसके लिए मैं क्षमा चाहता हूं (और मैंने टिप्पणी हटा दी है)। आपके पास एक बिंदु है कि आप सशर्त संकलन ब्लॉक में आईई संस्करण को सुरक्षित रूप से पहचान सकते हैं (और यह पर्याप्त होगा, जेस्क्रिप्ट संस्करण की जांच भी अनावश्यक है), और ब्राउजर डिटेक्शन * की आवश्यकता है ताकि 'होवर' संभावनाएं (जहां तक ​​मुझे पता है, उन्हें पता नहीं लगाया जा सकता है), लेकिन मुझे लगता है कि सशर्त टिप्पणियों का उपयोग करना ऐसा करने का एक और साफ तरीका है। उस ने कहा, ज्यादातर मामलों में आप केवल सुविधा का पता लगाने और उपयोग करना चाहिए। –

3

मैं एक समाधान मिल गया। कोड निम्नानुसार है।

<script type="text/javascript" charset="utf-8"> 
/*@cc_on 
if (@_jscript_version > 5.7) 
document.write("You are using IE8"); 
else if (@_jscript_version == 5.7 && window.XMLHttpRequest) 
document.write("You are using IE7"); 
else if (@_jscript_version == 5.6 || (@_jscript_version == 5.7 && !window.XMLHttpRequest)) 
document.write("You are using IE6"); 
else if (@_jscript_version == 5.5) 
document.write("You are using IE5.5"); 
else 
document.write("You are using IE5 or older"); 
@*/ 
</script> 
+1

क्या आप अंधे हैं? वह कोड का एक ही हिस्सा है जिसे उसने अपने प्रश्न में शामिल किया था। –

+7

हाय जोश, मैंने @if ... @ elif ... @ else ... @ end to if ... else अगर ... else। मुझे @if ... @ elif ... @ else में कुछ कोड मिला ... @ end ठीक से निष्पादित नहीं होगा जैसे ** window.XMLHttpRequest ** भाग। लेकिन बयान के मामले में यह सामान्य रूप से अच्छी तरह से काम करता है। –

2

मैं वर्षों के लिए यह अच्छा एक लाइनर का उपयोग कर दिया गया है:

var IE; //@cc_on IE = parseFloat((/MSIE[\s]*([\d\.]+)/).exec(navigator.appVersion)[1]); 

छोटे और सटीक (आईई 6-10 में परीक्षण किया गया)।

उन लोगों को ध्यान दें जो ग्रंट का उपयोग करते हैं। संरक्षित सामग्री सेट करना सुनिश्चित करें: 'कुछ' यदि आप uglify प्लगइन का उपयोग यह सुनिश्चित करने के लिए करते हैं कि सशर्त टिप्पणियां हटाई नहीं जाएंगी।

+0

आपको यह अच्छा एक-लाइनर कहां मिला? – yckart

+0

@yckart मैंने इसे लिखा था। आप https://github.com/willfarrell/angular-io/blob/master/src/scripts/ie.js पर अपना नवीनतम संस्करण देख सकते हैं जो क्रोम फ्रेम चेक (जो अप्रत्याशित जनवरी 2014 होगा, क्रोम प्रसिद्धि संख्या के कारण) लंबे समय तक बनाए रखा जा रहा है)। –

0

शायद पार्टी के लिए देर से एक सा है, लेकिन मैं भी इस समस्या के पार आया उस पर एक विस्फोट था और मेरे समाधान था इस प्रकार है, आशा है कि यह https://github.com/davesmiths/isIE

var isIE = false; 
/*@cc_on isIE = @_jscript_version;@*/ 
if (isIE !== false) { 
    if (isIE == 5.8) 
     isIE = 8; 
    else if (isIE == 5.7 && window.XMLHttpRequest) 
     isIE = 7; 
    else if (isIE == 5.7 || isIE == 5.6) 
     isIE = 6; 
    else if (isIE <= 5.5) 
     isIE = 5; 
}