2008-11-11 12 views
17

कुछ मौजूदा कोड में यह देखने के लिए एक परीक्षण है कि उपयोगकर्ता IE चला रहा है या नहीं, यह जांचकर कि ऑब्जेक्ट ब्राउज़र .Engine.trident परिभाषित किया गया है और सत्य लौटाता है।मैं कैसे निर्धारित कर सकता हूं कि आईई का कौन सा संस्करण जावास्क्रिप्ट में चल रहा है?

लेकिन मैं यह कैसे निर्धारित कर सकता हूं कि उपयोगकर्ता IE6 (या इससे पहले) या IE7 (या बाद में) चला रहा है या नहीं?

जावास्क्रिप्ट फ़ंक्शन के अंदर परीक्षण की आवश्यकता है ताकि एक सशर्त टिप्पणी उपयुक्त न लगे।

उत्तर

18
MSDN पर

detecting Internet Explorer More Effectively से:

function getInternetExplorerVersion() 
// Returns the version of Internet Explorer or a -1 
// (indicating the use of another browser). 
{ 
    var rv = -1; // Return value assumes failure. 
    if (navigator.appName == 'Microsoft Internet Explorer') 
    { 
    var ua = navigator.userAgent; 
    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); 
    if (re.exec(ua) != null) 
     rv = parseFloat(RegExp.$1); 
    } 
    return rv; 
} 

function checkVersion() 
{ 
    var msg = "You're not using Internet Explorer."; 
    var ver = getInternetExplorerVersion(); 

    if (ver > -1) 
    { 
    if (ver >= 6.0) 
     msg = "You're using a recent copy of Internet Explorer." 
    else 
     msg = "You should upgrade your copy of Internet Explorer."; 
    } 
    alert(msg); 
} 
+4

IE11 – JT703

4

आप पहले से ही एक पूर्व 1.9 संस्करण में jQuery का उपयोग कर रहे हैं और आप IE 11 का पता लगाने की जरूरत नहीं है, तो आप ऐसा कर सकते हैं:

if (jQuery.browser.msie == true) { 
if (jQuery.browser.version == 7.0) 
    // .. do something for 7.0 
else 
    // .. do something for < 7.0 
} 
+3

jQuery है बढ़िया है, लेकिन ब्राउज़र की जांच करने के लिए बस इसकी सिफारिश करना अधिक है। दूसरी तरफ, शायद उसे दरवाजे में अपना पैर पाने के लिए एक अच्छे कारण की जरूरत है। – TravisO

+0

एसओ जावास्क्रिप्ट प्रश्न रोग के लिए स्वत: -1 वोट, एक छोटे से एक लाइनर करने के लिए फ्रेमवर्क की सैकड़ों लाइनों में खींचें। – bobince

+2

हम में से कई पहले से ही अन्य कारणों से jQuery का उपयोग कर रहे हैं, इसलिए इन सवालों के ढांचे के जवाब उपयोगी हैं। जैसा कि आप देख सकते हैं, यह शुद्ध-जावास्क्रिप्ट समाधान से कहीं अधिक संक्षिप्त है। –

3

नेविगेटर वस्तु उपयोगकर्ता के ब्राउज़र के बारे में सभी जानकारी शामिल है :

जैसे:

वर ब्राउज़र = navigator.appName;

var b_version = navigator.appVersion;

var संस्करण = parseFloat (b_version);

देखें:

http://www.w3schools.com/js/js_browser.asp

+1

यह जानना आसान है लेकिन इस मामले में navigator.appVersion आईई 6 और आईई 7 दोनों में "4" देता है, इसलिए मैं इसका उपयोग दोनों के बीच अंतर करने के लिए नहीं कर सकता। हालांकि धन्यवाद। –

+0

वास्तव में अब सच नहीं है। एचटीएमएल 5 उदाहरण के लिए कहता है कि navigator.appName 'या तो स्ट्रिंग "नेटस्केप" या ब्राउज़र का पूरा नाम वापस करना होगा, उदा। "मेलबॉम्ब ब्राउनरेटर" - और उस ऐपवर्सन को या तो "4.0" स्ट्रिंग या ब्राउजर के संस्करण को विस्तार से प्रस्तुत करने वाली स्ट्रिंग को वापस करना होगा, उदा। "1.0 (वीएमएस; एन-यूएस) मेलबॉमेनेटर/9 000" - तो यह कोड किसी भी HTML5-अनुरूप ब्राउज़र के लिए संस्करण = या तो 4.0 या 1.0 लौटाएगा। – Spike0xff

3

आप एक विशेष कार्यों के लिए जाँच कर रहे हैं, तो आप सीधे इसके लिए जांच होनी चाहिए, उदा if (window.focus) {window.focus();}ब्राउज़र का पता लगाने कभी भी विश्वसनीय नहीं है।

ऑब्जेक्ट बनाम ब्राउज़र पहचान, check out this article at Quirksmode पर अधिक जानकारी के लिए।

दूसरी ओर, यदि आपको जिस सुविधा की आवश्यकता है वह ब्राउज़र प्रकार और संस्करण है, उदा। सांख्यिकीय उद्देश्यों के लिए, navigator.appName और navigator.appVersion के साथ जाएं। (हालांकि सावधान रहें - कई कम लोकप्रिय ब्राउज़रों ने स्वयं को एमएसआईई 6 या 7 के रूप में मास्कराइड किया है, क्योंकि कुछ साइटें ऐसी चीज को अवरुद्ध करती हैं जो आईई नहीं है कि "सभी आधुनिक ब्राउज़र आईई हैं, है ना?" (संकेत: अब और नहीं)।)

+1

यह एक अच्छा मुद्दा है। हालांकि इस मामले में वस्तु की उपस्थिति मुझे नहीं बताती है कि यह आईई 6 या 7 है। मुझे आईई 6 में एक बग के आसपास काम करने की आवश्यकता है। –

12

यदि आप वास्तव में यह सुनिश्चित करना चाहते हैं कि आप IE और एक विशिष्ट संस्करण का उपयोग कर रहे हैं तो आप IE के सशर्त टैग का उपयोग केवल आईई के भीतर कुछ कोड चलाने के लिए कर सकते हैं। यह वास्तव में सुंदर नहीं है लेकिन कम से कम आप सुनिश्चित कर सकते हैं कि यह वास्तव में आईई है और कुछ स्पूफेड संस्करण नहीं है।

<script> 
    var isIE = false; 
    var version = -1; 
</script> 
<!--[if IE 6]> 
    <script> 
     isIE = true; 
     version = 6 
    </script> 
<![endif]--> 
<!--[if IE 7]> 
    <script> 
     isIE = true; 
     version = 7 
    </script> 
<![endif]--> 

यह सुंदर आत्म व्याख्यात्मक है। IE6 में isIE, true और version6 है IE7 में isIEtrue है और version7 अन्यथा isIE गलत है और version-1

है वैकल्पिक रूप से आप सिर्फ अपने खुद के समाधान jQuery से plagarised कोड का उपयोग कर रोल कर सकते हैं।

var userAgent = navigator.userAgent.toLowerCase(); 
var version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], 
var isIE = /msie/.test(userAgent) && !/opera/.test(userAgent),  
+0

क्षमा करें आपकी पोस्ट का हिस्सा मिस गया जहां आप कहते हैं कि सशर्त टिप्पणियां उपयुक्त नहीं हैं –

+0

अच्छा +1 मुझे यह पसंद है! – niko

0

यह स्क्रिप्ट मैं उपयोग है और यह काफी अच्छी तरह से काम करने के लिए लगता है:

// Returns 0 if the browser is anything but IE 
function getIEVersion() { 
    var ua = window.navigator.userAgent; 
    var ie = ua.indexOf("MSIE "); 
    return ((ie > 0) ? parseInt(ua.substring(ie+5, ua.indexOf(".", ie))) : 0); 
} 

आशा है कि किसी को मदद करता है ...

2

शायद यह मतदान करने जा रहा है, क्योंकि यह सीधे सवाल का जवाब नहीं दे रहा है, लेकिन ... आपको ब्राउज़र-विशिष्ट कोड लिखना चाहिए। सबसे व्यापक रूप से स्वीकृत ब्राउज़रों के लिए कोडिंग करते समय आप बहुत कम नहीं कर सकते हैं।

संपादित करें: मुझे केवल सशर्त टिप्पणियों के लिए उपयोगी पाया गया था जब मुझे ie6.css या ie7.css शामिल करने की आवश्यकता थी।

0

यह आपको और अधिक जानकारी की तुलना में आप चाहते हैं देना चाहिए:

var agent = navigator.userAgent; 
var msiePattern = /.*MSIE ((\d+).\d+).*/ 
if(msiePattern.test(agent)) { 
    var majorVersion = agent.replace(msiePattern,"$2"); 
    var fullVersion = agent.replace(msiePattern,"$1"); 
    var majorVersionInt = parseInt(majorVersion); 
    var fullVersionFloat = parseFloat(fullVersion); 
} 
0

कोई लगता है के रूप में अभी तक यह कहा है करने के लिए:

एक जावास्क्रिप्ट फ़ंक्शन के अंदर परीक्षण की आवश्यकता है ताकि एक सशर्त टिप्पणी उपयुक्त न लगे।

आप आसानी से एक सशर्त टिप्पणी डाल सकते हैं - एक JScript सशर्त टिप्पणी, न कि कोई HTML एक - एक समारोह के अंदर:

function something() { 
    var IE_WIN= false; 
    var IE_WIN_7PLUS= false; 
    /*@cc_on 
    @if (@_win32) 
     IE_WIN= true; 
     @if (@_jscript_version>=5.7) 
      IE_WIN_7PLUS = true; 
     @end 
    @end @*/ 
    ... 
} 

यह वैश्विक स्तर पर एक बार परीक्षण करना है, हालांकि अधिक विशिष्ट है, और बस इसके बाद संग्रहीत झंडे की जांच करें।

सीसी इस गड़बड़ी से गुजरने से अधिक विश्वसनीय हैं कि उपयोगकर्ता-एजेंट स्ट्रिंग इन दिनों बन गई है। Navigator.userAgent पर स्ट्रिंग मिलान विधियां ओपेरा जैसे स्पूफिंग ब्राउज़र को गलत पहचान सकती हैं।

बेशक क्षमता स्नीफिंग क्रॉस-ब्राउज़र कोड के लिए बहुत बेहतर है जहां यह संभव है, लेकिन कुछ मामलों के लिए - आमतौर पर बग फिक्स वर्कअराउंड्स - आपको विशेष रूप से आईई की पहचान करने की आवश्यकता होती है, और सीसी शायद आज ऐसा करने का सबसे अच्छा तरीका है।

3

तो आईई 8 संगतता दृश्य मोड खुद को आईई 7 के रूप में रिपोर्ट करता है, भले ही यह हमेशा व्यवहार नहीं करता है। और इसके लिए, मैं आपको यह राक्षस देता हूं:

// IE8's "Compatibility mode" is anything but. Oh well, at least it doesn't take 40 lines of code to detect and work around it. 
// Oh wait: 
/* 
* Author: Rob Reid 
* CreateDate: 20-Mar-09 
* Description: Little helper function to return details about IE 8 and its various compatibility settings either use as it is 
* or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is 
* very common so use with caution. 
*/ 
function IEVersion(){ 
    var _n=navigator,_w=window,_d=document; 
    var version="NA"; 
    var na=_n.userAgent; 
    var ieDocMode="NA"; 
    var ie8BrowserMode="NA"; 
    // Look for msie and make sure its not opera in disguise 
    if(/msie/i.test(na) && (!_w.opera)){ 
     // also check for spoofers by checking known IE objects 
     if(_w.attachEvent && _w.ActiveXObject){   
      // Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7 
      version = (na.match(/.+ie\s([\d.]+)/i) || [])[1]; 
      // Its IE 8 pretending to be IE 7 or in compat mode   
      if(parseInt(version)==7){     
       // documentMode is only supported in IE 8 so we know if its here its really IE 8 
       if(_d.documentMode){ 
        version = 8; //reset? change if you need to 
        // IE in Compat mode will mention Trident in the useragent 
        if(/trident\/\d/i.test(na)){ 
         ie8BrowserMode = "Compat Mode"; 
        // if it doesn't then its running in IE 7 mode 
        }else{ 
         ie8BrowserMode = "IE 7 Mode"; 
        } 
       } 
      }else if(parseInt(version)==8){ 
       // IE 8 will always have documentMode available 
       if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";} 
      } 
      // If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions    
      ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5        
     } 
    } 

    return { 
     "UserAgent" : na, 
     "Version" : version, 
     "BrowserMode" : ie8BrowserMode, 
     "DocMode": ieDocMode 
    }    
} 
var ieVersion = IEVersion(); 
var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8; 
+0

पर काम नहीं करता है यह उन साइटों के लिए अच्छा है जिनके पास टैग हैं: 'मेटा http-equiv =" X-UA-compatible "content =" IE = EmulateIE7, IE = 9 ">' – jfroom

1

ठीक है ... मैं थोड़ी देर के लिए सोचने के बाद यहां आया था। बस एक साधारण समाधान खोजना चाहता था।

if (navigator.appName == 'Microsoft Internet Explorer') { 
     // Take navigator appversion to an array & split it 
     var appVersion = navigator.appVersion.split(';'); 
     // Get the part that you want from the above array 
     var verNumber = appVersion[1]; 

     alert(verNumber); 
} 

यह रिटर्न पूर्व: - MSIE 10.0, MSIE 9.0, MSIE 8.0

आगे का विस्तार, आप अगर यह "की तुलना में कम है" जाँच करना चाहते हैं या आईई संस्करण "इससे अधिक", आप थोड़ा संशोधित कर सकते हैं

if (navigator.appName == 'Microsoft Internet Explorer') { 
     var appVersion = navigator.appVersion.split(';'); 
     var verNumber = appVersion[1]; 
     // Reaplce "MSIE " from the srting and parse it to integer value   
     var IEversion = parseInt(verNumber.replace('MSIE ', '')); 

     if(IEversion <= 9){ 
      alert(verNumber); 
     } 
} 

w3schools से आधार विचार आया, उम्मीद है कि इस कुछ एक में मदद मिलेगी ...: डी

0
<script> 
    alert("It is " + isIE()); 

    //return ie number as int else return false 
    function isIE() { 
     var myNav = navigator.userAgent.toLowerCase(); 
     if (myNav.indexOf('msie') != -1) //ie less than ie11 (6-10) 
     { 
      return parseInt(myNav.split('msie')[1]); 
     } 
     else 
     { 
      //Is the version more than ie11? Then return false else return ie int number 
      return (!!(myNav.match(/trident/) && !myNav.match(/msie/)) == false)?false : parseInt(myNav.split('rv:')[1].substring(0, 2));    
     } 
    } 
</script> 
संबंधित मुद्दे

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