2012-09-21 11 views
5

यदि जावा आईई नहीं है या यह आईई 9 + है तो मैं जावास्क्रिप्ट का एक टुकड़ा चलाने के लिए चाहता हूं। यदि ब्राउज़र IE8 या निचला संस्करण है, तो जावास्क्रिप्ट का एक और टुकड़ा चलाना चाहिए।ब्राउज़र पर निर्भर करते हुए, अपने जावास्क्रिप्ट को सशर्त रूप से कैसे चलाएं?

मैं Conditional Comments का उपयोग करने की कोशिश की:

<!--[if (!IE)|(gte IE 9)]> 
    <script type="text/javascript"> /* code 1 */ </script> 
<![endif]--> 

<!--[if (lt IE 9)]> 
    <script type="text/javascript"> /* code 2 */ </script> 
<![endif]--> 

लेकिन IE6 और IE7 अभी भी कोड 1 को क्रियान्वित करने थे। और फ़ायरफ़ॉक्स कोड 2 निष्पादित कर रहा था ...

कोई jQuery नहीं, कृपया।

संपादित करें: असल में, मेरी सशर्त अभिव्यक्ति गलत थी। लेकिन अभी भी चुने गए उत्तर में प्रस्तावित फीचर डिटेक्शन के साथ चला गया।

+4

ब्राउज़र पहचान से अधिक सुविधा पहचान करने के लिए यह आमतौर पर बहुत बेहतर है। इसलिए, यदि आप वर्णन करते हैं कि आप IE9 और अन्य ब्राउज़रों में किस सुविधा का उपयोग करना चाहते हैं, लेकिन IE8 और नीचे नहीं, तो आप रन-टाइम फीचर डिटेक्शन का उपयोग कर सकते हैं जो आम तौर पर ब्राउज़र पहचान से अधिक सटीक है। – jfriend00

+0

मैं document.getElementByClass() का उपयोग करना चाहता हूं, जो केवल IE8 + –

उत्तर

5

अपनी टिप्पणी से, ऐसा लगता है कि तुम सिर्फ अगर तुम document.getElementsByClassName() उपयोग कर सकते हैं तय करने के लिए कोशिश कर रहे हैं लगता है। अगर ऐसी बात है, तो आप इस तरह की सुविधा का पता लगाने का उपयोग कर सकते हैं:

if (document.getElementsByClassName) { 
    // code here that uses getElementsByClassName 
} else { 
    // code here that doesn't use getElementsByClassName 
} 

यह सिर्फ इतना है कि आप पहली बार की जांच किए बिना IE के पुराने संस्करणों में उपयोग कर सकते हैं एक polyfill स्थापित करने के लिए क्लीनर हो सकता है। उनमें से कई उपलब्ध हैं जो आप Google खोज के साथ पा सकते हैं। यहां one:

// Add a getElementsByClassName function if the browser doesn't have one 
// Limitation: only works with one class name 
// Copyright: Eike Send http://eike.se/nd 
// License: MIT License 

if (!document.getElementsByClassName) { 
    document.getElementsByClassName = function(search) { 
    var d = document, elements, pattern, i, results = []; 
    if (d.querySelectorAll) { // IE8 
     return d.querySelectorAll("." + search); 
    } 
    if (d.evaluate) { // IE6, IE7 
     pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]"; 
     elements = d.evaluate(pattern, d, null, 0, null); 
     while ((i = elements.iterateNext())) { 
     results.push(i); 
     } 
    } else { 
     elements = d.getElementsByTagName("*"); 
     pattern = new RegExp("(^|\\s)" + search + "(\\s|$)"); 
     for (i = 0; i < elements.length; i++) { 
     if (pattern.test(elements[i].className)) { 
      results.push(elements[i]); 
     } 
     } 
    } 
    return results; 
    } 
} 
0

आप HTML में से किसी एक के बजाय जावास्क्रिप्ट के भीतर चेक द्वारा यह सर्वोत्तम कर सकते हैं। जेएस में आपके पास संपत्ति navigator.userAgent है जो प्रत्येक ब्राउज़र के लिए एक अद्वितीय स्ट्रिंग देता है (और यहां तक ​​कि आईई भी इसके विभिन्न संगतता संस्करणों में)। इस पोस्ट navigator.userAgent

+1

में उपलब्ध है यह आईई 10, 11, 12, 13, आदि को संभाल नहीं करता है ... और ओपी के तर्क को लागू नहीं करता है। इसके अलावा, फीचर डिटेक्शन शायद इस समस्या को हल करने का एक बहुत ही बढ़िया तरीका है। – jfriend00

0

if(navigator.userAgent.indexOf('MSIE 9.0') !== -1) 
{ 
    // call IE9 specific method 
} 
else 
{ 
    // call method for other browsers 
} 

एक और अधिक परिष्कृत दृष्टिकोण के लिए देखें jfriend00 राज्यों के रूप में पता लगाने की सुविधा: तो मैं सभी ब्राउज़रों में पूरी जे एस ब्लॉक निष्पादित करने के लिए और यह के शीर्ष जोड़ने बस कुछ इस तरह जोड़ने का सुझाव एक बेहतर समाधान हो सकता है लेकिन यहां सशर्त टिप्पणियां हैं जो आपकी आवश्यकताओं को पूरा करती हैं।

<!--[if gte IE 9]> --> 
    <script type="text/javascript"> alert('ie9+ and not ie') </script> 
<!-- <![endif]--> 
<!--[if lt IE 9]> 
    <script type="text/javascript"> alert(' < ie9') </script> 
<![endif]--> 

http://jsfiddle.net/szF4J/1/