जावास्क्रिप्ट में IE संस्करण (v9 से पहले) का पता लगाएं


246

यदि हम Internet Explorerv9 से पहले के संस्करण का उपयोग कर रहे हैं तो मैं अपनी वेब साइट के उपयोगकर्ताओं को एक त्रुटि पृष्ठ पर बाउंस करना चाहता हूं । यह सिर्फ समर्थन करने के लिए हमारे समय और धन के लायक नहीं है IE pre-v9। अन्य सभी गैर-IE ब्राउज़र के उपयोगकर्ता ठीक हैं और उन्हें बाउंस नहीं किया जाना चाहिए। यहाँ प्रस्तावित कोड है:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

क्या यह कोड ट्रिक करेगा?

कुछ टिप्पणियों को दूर करने के लिए जो शायद मेरे रास्ते आने वाली हैं:

  1. हां, मुझे पता है कि उपयोगकर्ता अपनी useragentस्ट्रिंग फोर्ज कर सकते हैं । मुझे चिंता नहीं है।
  2. हाँ, मुझे पता है कि प्रोग्रामिंग पेशेवरों ब्राउज़र-प्रकार के बजाय सुविधा-समर्थन को सूँघना पसंद करते हैं, लेकिन मुझे नहीं लगता कि यह दृष्टिकोण इस मामले में समझ में आता है। मैं पहले से ही जानता हूं कि सभी (प्रासंगिक) गैर-IE ब्राउज़र उन सुविधाओं का समर्थन करते हैं जिनकी मुझे आवश्यकता है और जो सभी pre-v9 IEब्राउज़र नहीं करते हैं। पूरे साइट में फ़ीचर द्वारा चेकिंग एक बेकार बात होगी।
  3. हां, मुझे पता है कि साइट का उपयोग करने की कोशिश करने वाले IE v1(या = = 20) किसी को 'badBrowser' सही पर सेट नहीं मिलेगा और चेतावनी पृष्ठ ठीक से प्रदर्शित नहीं होगा। यह एक जोखिम है जिसे हम लेने के लिए तैयार हैं।
  4. हां, मुझे पता है कि Microsoft के पास "सशर्त टिप्पणियां" हैं जिनका उपयोग सटीक ब्राउज़र संस्करण का पता लगाने के लिए किया जा सकता है। IE अब के रूप में सशर्त टिप्पणियों का समर्थन करता है IE 10, इस दृष्टिकोण का प्रतिपादन बिल्कुल बेकार है।

किसी भी अन्य स्पष्ट मुद्दों के बारे में पता होना चाहिए?


122
"IE प्री-वी 9 का समर्थन करने के लिए यह हमारे समय और धन के लायक नहीं है"। काश मैं वह कर सकता।
हसन

2
बिंदु के आधार पर [2] मैं मॉडर्निज़्र ( en.wikipedia.org/wiki/Modernizr ) का सुझाव नहीं दूंगा - हर किसी को कहीं न कहीं रेत में एक रेखा खींचनी होगी - लेकिन IE9 एक उच्च रेखा जैसा प्रतीत होता है
amelvin

1
सशर्त टिप्पणियां सामान्य टिप्पणियां हैं। केवल IE उन्हें विशेष के रूप में व्याख्या करता है। IE10 + अब ऐसा नहीं करेगा।
एंड्रियास

3
सशर्त टिप्पणियों को IE 10 द्वारा गैर-IE ब्राउज़रों के समान माना जाएगा। वे मान्य HTML टिप्पणियां हैं इसलिए इसे इस प्रकार माना जाएगा। मैं एंड्रियास से सहमत हूं और लगता है कि सशर्त टिप्पणियां जाने का तरीका है।
टिम डाउन

1
आधिकारिक दस्तावेज जो कहता है कि IE10 + सशर्त टिप्पणियों का समर्थन नहीं करेगा: blogs.msdn.com/b/ie/archive/2011/07/06/… - धन्यवाद: stackoverflow.com/a/9900331/320399
blong

जवाबों:


354

यह करने का मेरा पसंदीदा तरीका है। यह अधिकतम नियंत्रण देता है। (नोट: सशर्त बयान केवल IE5 में समर्थित हैं - 9.)

सबसे पहले अपने यानी कक्षाओं को सही तरीके से सेट करें

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

फिर आप स्टाइल अपवाद बनाने के लिए बस CSS का उपयोग कर सकते हैं, या, यदि आपको आवश्यकता हो, तो आप कुछ सरल जावास्क्रिप्ट जोड़ सकते हैं:

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

पॉल आयरिश को धन्यवाद ।


21
यह देखते हुए कि ओपी ने विशुद्ध रूप से जावास्क्रिप्ट समाधान के लिए कहा, मेरा मानना ​​है कि नीचे @Tim द्वारा उत्तर बेहतर है, क्योंकि इसमें मौजूदा HTML को बदलना शामिल नहीं है, साथ ही यह jQuery का उपयोग नहीं कर रहा है: stackoverflow.com/a/10965203/134120
AsGoodAsItGates

मुझे इस पर w3 html सत्यापनकर्ता के साथ एक त्रुटि मिलती है:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick

161

IE संस्करण लौटाएँ या नहीं तो IE झूठी लौटें

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

उदाहरण:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

या

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

या

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
IE11 के लिए काम नहीं करता है। IE 11 से, उन्होंने यूए स्ट्रिंग को बदल दिया है"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
एनी

22
कृपया ध्यान दें कि एफएफ में "झूठी <9" "सच" है। तो, स्थिति होनी चाहिएif (isIE () && isIE () < 9) {
nZeus

3
@DeadlyChambers शायद यह IE7 मानकों मोड में चल रहा था? msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
mason81

4
स्वीकृत उत्तर HTML में IE संस्करण का पता लगाने का तरीका है। यह मूल प्रश्न का उत्तर देता है।
मैट वैगनर

2
@PrasadGayan - Microsoft एज इंटरनेट एक्सप्लोरर नहीं है। इसलिए असत्य को वापस करना इसके लिए सही बात है।
अगस्त को ब्रायनग्रेज़्ज़क

120

यदि किसी और ने addEventLister-method को नहीं जोड़ा है और आप सही ब्राउज़र मोड का उपयोग कर रहे हैं तो आप IE 8 या उससे कम के लिए जांच कर सकते हैं

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

विरासत इंटरनेट एक्सप्लोरर और संलग्नक (MDN)


7
यह पूरी तरह से जावास्क्रिप्ट में IE <= 8 का पता लगाने के लिए सबसे कुशल तरीका लगता है - और मेरे जैसे लोगों के लिए बहुत अच्छा है जो इसे करने के लिए रास्ता ढूंढ रहे थे।
ग्रेगरी मैगर्सक

महान! यह भी Quirks मोड में IE9 का पता लगाता है जो कि मैं देख रहा हूं।
sstur

7
हालांकि यह "उपयोग में आसान" समाधान है, लेकिन इसके कुछ जोखिम हैं। आपकी कंपनी में कोई भी (जिसे आपके समाधान की जानकारी नहीं है) IE 8 में इसकी कमी से निपटने के लिए "addEventListener" या "संलग्नक" को लागू कर सकता है और फिर, आपका कोड काम करना बंद कर देगा।
ज़े कार्लोस

@RoyiNamir IE8 के लिए यह परीक्षण। क्यों पृथ्वी पर यह IE11 पर सच लौटना चाहिए?
एंड्रियास

@ और उफ़। नहीं देखा कि ओपी चाहता है कि 9 से पहले। हटा रहा है।
रॉय नमिर

114

सशर्त टिप्पणियों का उपयोग करें। आप IE के उपयोगकर्ताओं का पता लगाने की कोशिश कर रहे हैं <9 और सशर्त टिप्पणियाँ उन ब्राउज़रों में काम करेंगे; अन्य ब्राउज़रों (IE> = 10 और गैर-IE) में टिप्पणियों को सामान्य HTML टिप्पणियों के रूप में माना जाएगा, जो कि वे हैं।

उदाहरण HTML:

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

आप इसे शुद्ध रूप से स्क्रिप्ट के साथ भी कर सकते हैं, यदि आपको आवश्यकता है:

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
@Tim डाउन के उत्तर के जावास्क्रिप्ट संस्करण ने मेरे लिए बहुत अच्छा काम किया। मैंने विंडोज 7 और आईई 8, 9, 10 और 11 के साथ इसका परीक्षण करने के लिए BrowserStack का उपयोग किया; सफारी 5.1, फ़ायरफ़ॉक्स 28.0, क्रोम 33.0 और ओपेरा 20.0 के साथ मैक ओएस एक्स स्नो लेपर्ड; iPhone 5 मोबाइल सफारी; और एंड्रॉइड सैमसंग गैलेक्सी टैब 2 10.1 4.0। जैसा कि अपेक्षित था, केवल IE8 ने बताया कि यह IeLessThan9 था। अच्छा!
स्टीव सपोर्टा

58

MSIE का पता लगाने के लिए (v6 - v7 - v8 - v9 - v10 - v11) आसानी से:

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

IE10 का पता लगाने के लिए उपयोगी है, क्योंकि यह सशर्त टिप्पणियों का समर्थन नहीं करता है। IE11 में काम नहीं करता है, लेकिन IE11 में आमतौर पर एक ठीक व्यवहार होता है
personne3000

11
अंत में एक जवाब जो फीचर डिटेक्शन का उपयोग करने के बारे में व्याख्यान नहीं करता है और वास्तव में प्रश्न का उत्तर देता है।
cdmckay

32

इस तरह से IE के लिए AngularJS जाँच करता है

/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
var msie = document.documentMode;

if (msie < 9) {
    // code for IE < 9
}

वाह यह सब सशर्त टिप्पणी की तुलना में बहुत सरल है! इसकी कोई सीमा नहीं?
एंड्रयू जूल 24'15

डॉक्स के अनुसार, IE8 + इस संपत्ति का समर्थन करता है इसलिए मुझे लगता है कि ज्यादातर मामलों के लिए पर्याप्त होना चाहिए।
इउरी

MSDN संदर्भ के अनुसार, "जब वर्तमान दस्तावेज़ अभी तक निर्धारित नहीं किया गया है, तो DocumentMode शून्य (0) का मान लौटाता है। यह आमतौर पर तब होता है जब कोई दस्तावेज़ लोड हो रहा होता है।" क्या इसका मतलब है कि आपको <head> में भरी हुई स्क्रिप्ट के भीतर एक वैध प्रतिक्रिया नहीं मिल सकती है?
एरिक नोल्स

मुझे लगता है कि जब आप दस्तावेज़ पहले से लोड हो जाता है, तो आप window.onload पर मान की जाँच करके इसे ठीक कर सकते हैं।
Iurii

28

IE8 और पुराने को मज़बूती से छानने के लिए, वैश्विक वस्तुओं की जाँच की जा सकती है:

if (document.all && !document.addEventListener) {
    alert('IE8 or lower');
}

2
document.all - IE 11 में समर्थित नहीं - msdn.microsoft.com/en-us/library/ie/ms537434%28v=vs.85%29.aspx
राजा

2
@ रज्जाकौरि - जो ठीक है अगर आईई 9 के लिए परीक्षण करने की कोशिश कर रहा है - अगर स्थिति झूठी होगी।
nnnnnn

19

IE का पता लगाने वाले फीचर डिटेक्शन (IE6 +) का उपयोग करते हुए IE6 से पहले के ब्राउजर्स को 6 के रूप में पाया जाता है, गैर-IE ब्राउज़रों के लिए शून्य देता है:

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

संपादित करें: मैंने आपकी सुविधा के लिए एक bower / npm रेपो बनाया है: यानी संस्करण

अपडेट करें:

एक और अधिक कॉम्पैक्ट संस्करण एक पंक्ति में लिखा जा सकता है:

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

यह फ़ंक्शन IE प्रमुख संस्करण संख्या को पूर्णांक के रूप में लौटाएगा, या undefinedयदि ब्राउज़र इंटरनेट एक्सप्लोरर नहीं है। यह, सभी उपयोगकर्ता एजेंट समाधानों की तरह, उपयोगकर्ता एजेंट स्पूफिंग के लिए स्वीकार्य है (जो कि संस्करण 8 के बाद से IE की एक आधिकारिक विशेषता रही है)।

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

ओवेन, व्यवहार में कोई इसका उपयोग कैसे करता है? रिटर्न वैल्यू कैसे प्राप्त करता है? मैंने कोशिश की console.log(!!match && parseInt(match[1])), console.log(parseInt(match[1]))और console.log(match), लेकिन उनमें से किसी के साथ कोई नतीजा नहीं निकला।
फ्रैंक कॉनिजन

फ़ंक्शन को कॉल करके वापसी मान प्राप्त करें getIEVersion()। उदाहरण के लिए:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
ओवेन

15

सशर्त टिप्पणियों का उपयोग करके JS में IE का पता लगाएं

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

यह मेरे जवाब के रूप में बहुत ज्यादा है।
टिम डाउन

@TimDown: शायद, लेकिन यह उत्तर थोड़ा अधिक फीचर-पूर्ण है (यह आपको संस्करण संख्या बताता है), और अच्छी तरह से टिप्पणी की गई है। इसके अलावा, इस उत्तर की शुरुआत में लिंक इस तकनीक पर कई जानकारीपूर्ण टिप्पणियों और दिलचस्प विविधताओं के साथ एक जिस्ट की ओर जाता है।
एलन

@ एलन: निष्पक्ष अंक। मैं सवाल के लिए मेरी सिलवाया लेकिन स्रोत का हवाला नहीं दिया।
टिम डाउन

12

यह मेरे लिए काम करता है। मैं इसे एक पेज पर रीडायरेक्ट के रूप में उपयोग करता हूं, जो बताता है कि हम क्यों पसंद नहीं करते हैं <IE9 और हमारे द्वारा पसंद किए गए ब्राउज़रों को लिंक प्रदान करें।

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
ओह, यह एक बुरा है। मैं एक अधिक अनुकूल विधि का उपयोग करता हूं, एक IE चेतावनी के रूप के साथ एक डिव प्रदर्शित करता हूं और जब आगंतुक उस पर क्लिक करता है, तो उपयोगकर्ता ब्राउज़हैप्पी.कॉम पर
कोडबीट

10

आपका कोड चेक कर सकता है, लेकिन जैसा कि आपने सोचा था, यदि कोई आईई v1 या> वी 19 का उपयोग करके आपके पृष्ठ तक पहुंचने का प्रयास करता है, तो त्रुटि नहीं मिलेगी, इसलिए नीचे दिए गए इस कोड की तरह रेगेक्स अभिव्यक्ति के साथ चेक को अधिक सुरक्षित रूप से किया जा सकता है:

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

यह एक अच्छा जवाब नहीं है। यूए-सूँघना अविश्वसनीय है। उस पर अधिक यहाँ: modernizr.com/docs
Jezen थॉमस

3
@ जेजेन कभी-कभी यूए-सूँघने का रास्ता होता है: github.com/Modernizr/Modernizr/issues/538
István Ujj-Mészáros

8

Microsoft संदर्भ पृष्ठ पर दिए गए संस्करण 10 के अनुसार IE में सशर्त टिप्पणियाँ अब समर्थित नहीं हैं

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

फिर उपयोग करें:

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
यह एकमात्र ऐसी चीज़ थी जो पूरे नेट पर काम करती थी, कम से कम मैंने जो चीज़ें आज़माई थीं ... thx;)
हेनरिक सी।

यह कोड अच्छा है, लेकिन संगतता दृश्य मोड का पता नहीं लगा सकता है। मैं IE 11 में IE 8 में संगतता दृश्य का उपयोग कर रहा हूं और यह कोड अभी भी version 11EDIT दे रहा है : यह कोड अद्भुत है! हाहा, यह अंदर की हर चीज के साथ एक वस्तु देता है। संस्करण 11 है लेकिन docModeIR बराबर 9. धन्यवाद!
मार्सेलो बार्बोसा

5

10 और 11 के लिए:

सशर्त टिप्पणियों के मानक को बनाए रखने के लिए आप js का उपयोग कर सकते हैं और html में एक वर्ग जोड़ सकते हैं :

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

या गेंदबाज की तरह एक दायित्व का उपयोग करें:

https://github.com/ded/bowser

या सुविधा का पता लगाने के लिए आधुनिकीकरण:

http://modernizr.com/


2
मैंने कुछ स्क्रिप्ट और समाधान की कोशिश की लेकिन कुछ भी काम नहीं किया। फिर मैंने प्रोजेक्ट में बेज़र को शामिल किया और यह बस काम कर गया। तो एक सुझाव के लिए गेंदबाज।
मोलदे

3

Internet Explorer 10 | 11 का पता लगाने के लिए आप इस छोटी सी लिपि का तुरंत उपयोग कर सकते हैं बॉडी टैग के बाद:

मेरे मामले में मैं सिर में लोड jQuery पुस्तकालय का उपयोग करें।

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

मुझे यह धन्यवाद पसंद है, मुझे केवल 10 या 11 का पता लगाने की आवश्यकता है क्योंकि मैं पूर्व संस्करणों का समर्थन नहीं करता हूं
बजे

IE9 भी त्रिशूल है लेकिन CSS समर्थन के साथ समान नहीं है। आपका पता लगता है कि कम से कम 10 है, लेकिन यह सही नहीं है।
कोडबीट

3

यह मृत्यु के लिए उत्तर दिया गया है, लेकिन यह आप सभी की जरूरत है।

!!navigator.userAgent.match(/msie\s[5-8]/i)

इसके अलावा, यहाँ एक सैंडबॉक्स है जो सबसे आम IE उपयोगकर्ता एजेंट स्ट्रिंग्स के खिलाफ रेगेक्स पैटर्न दिखा रहा है: regex101.com/r/lC6oP3/1
टिमोथी पेरेज़

@alessadro - लेकिन यह माना जाता है, है ना? ओपी <9 ...
nnnnnn

2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

Microsoft के अनुसार , निम्नलिखित सबसे अच्छा समाधान है, यह बहुत सरल है:

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 >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
      }
    alert( msg );
}

वास्तव में, और यदि कोई अन्य व्यक्ति यहाँ भूमि का उपयोग करने की कोशिश कर रहा है, तो बाद के उत्तर में कोड IE11 ( stackoverflow.com/a/26375930/1129926 ) के लिए काम करता है । लेकिन सावधान रहना, यह IE12 के लिए काम करेंगे, आदि? नीचे की रेखा को अस्थायी हैक के रूप में माना जाना सबसे अच्छा है और वे बाद में विफल होने की संभावना है क्योंकि नए ब्राउज़र संस्करण रिलीज़ होते हैं (मैं एज का उल्लेख भी नहीं करूंगा)।
जेफ मर्गलर

1

मैं umpteenth समय के लिए इस कोड को फिर से लिखने की सिफारिश नहीं करने जा रहा हूं। मैं आपको सशर्त पुस्तकालय ( http://conditionizr.com/ ) का उपयोग करने की सलाह दूंगा जो विशिष्ट IE संस्करणों के साथ-साथ अन्य ब्राउज़रों, ऑपरेटिंग सिस्टम और यहां तक ​​कि रेटिना डिस्प्ले की उपस्थिति या अनुपस्थिति के लिए परीक्षण करने में सक्षम है।

केवल उन विशिष्ट परीक्षणों के लिए कोड शामिल करें जिनकी आपको आवश्यकता है और आप एक परीक्षण किए गए पुस्तकालय का लाभ भी प्राप्त करते हैं जो कई पुनरावृत्तियों के माध्यम से हुआ है (और जो आपके कोड को तोड़े बिना अपग्रेड करना आसान होगा)।

यह मॉडर्निज़्र के साथ अच्छी तरह से मेल खाता है जो उन सभी मामलों को संभाल सकता है जहां आप एक विशिष्ट ब्राउज़र के बजाय एक विशिष्ट क्षमता के लिए बेहतर परीक्षण कर रहे हैं।


1

मुझे यह पसंद है:

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

IE का पता लगाने के लिए यह दृष्टिकोण ताकत को जोड़ता है और सशर्त टिप्पणियों का उपयोग करके jKey के उत्तर की कमजोरियों से बचा जाता है और ओवेन का जवाब अन्य एजेंटों का उपयोग करता है।

  • jKey का दृष्टिकोण 9 संस्करण और IE 8 और 9 में स्पूफिंग करने वाले उपयोगकर्ता एजेंट के लिए काम करता है।
  • ओवेन का दृष्टिकोण IE 5 और 6 (रिपोर्टिंग 7) पर विफल हो सकता है और यूए स्पूफिंग के लिए अतिसंवेदनशील होता है, लेकिन यह IE संस्करण> = 10 (अब 12 भी शामिल है, जो ओवेन के उत्तर को स्थगित करता है) का पता लगा सकता है।

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

यह आपके दस्तावेज़ में IE संस्करण वाले उपयोगी वर्गों को सेट करने के लिए इस्तेमाल किया जा सकता है:

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

ध्यान दें कि यह संगतता मोड का उपयोग करता है, यदि IE संगतता मोड में है। यह भी ध्यान दें कि IE संस्करण ज्यादातर पुराने संस्करणों (<10) के लिए उपयोगी है; उच्चतर संस्करण अधिक मानक-अनुपालन वाले हैं और संभवतः आधुनिकता की तरह कुछ का उपयोग करके सुविधाओं की जांच करना बेहतर है।


1

मैंने इसके लिए एक सुविधाजनक अंडरस्कोर मिक्सिन बनाया।

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

या केवल

//   IE 10: ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 
//   IE 11: ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 
// Edge 12: ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 
// Edge 13: ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

IE के संस्करणों की जांच करने के लिए मुझे मिली सबसे व्यापक JS स्क्रिप्ट http://www.pinlady.net/PluginDetect/IE/ है । पूरी लाइब्रेरी http://www.pinlady.net/PluginDetect/Browsers/ पर है

IE10 के साथ, सशर्त विवरण अब समर्थित नहीं हैं।

IE11 के साथ, उपयोगकर्ता एजेंट में अब MSIE नहीं है। इसके अलावा, उपयोगकर्ता एजेंट का उपयोग करना विश्वसनीय नहीं है क्योंकि इसे संशोधित किया जा सकता है।

PluginDetect JS Script का उपयोग करके, आप IE के लिए पता लगा सकते हैं और विशिष्ट IE संस्करणों को लक्षित करने वाले बहुत विशिष्ट और अच्छी तरह से तैयार किए गए कोड का उपयोग करके सटीक संस्करणों का पता लगा सकते हैं। यह बहुत उपयोगी है जब आप परवाह करते हैं कि आप किस ब्राउज़र के साथ काम कर रहे हैं।


0

मुझे एहसास है कि मैं यहां पार्टी में थोड़ा लेट हो गया हूं, लेकिन मैं एक सरल तरीके से एक लाइन की जांच कर रहा था कि क्या कोई ब्राउज़र IE है और 10 से नीचे क्या संस्करण है। मैंने इसे संस्करण 11 के लिए कोडित नहीं किया है, इसलिए शायद इसके लिए थोड़े संशोधन की आवश्यकता होगी।

हालाँकि यह कोड है, यह एक ऑब्जेक्ट के रूप में काम करता है, जिसमें एक संपत्ति और एक विधि होती है और नाविक ऑब्जेक्ट को स्क्रैप करने के बजाय ऑब्जेक्ट डिटेक्शन पर निर्भर करता है (जो कि बड़े पैमाने पर त्रुटिपूर्ण है क्योंकि इसे ख़राब किया जा सकता है)।

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

उपयोग isIE.browserएक संपत्ति है जो एक बूलियन लौटाता है और सशर्त टिप्पणियों पर निर्भर करता है isIE.detectedVersion()जो विधि 5 और 10 के बीच एक संख्या देता है। मैं यह धारणा बना रहा हूं कि 6 से कम कुछ भी नहीं है और आप गंभीर पुराने स्कूल क्षेत्र में हैं और आप इससे कहीं अधिक मांसल हैं एक लाइनर और 10 से अधिक कुछ भी और आप नए क्षेत्र में हैं। मैंने IE11 में सशर्त टिप्पणियों का समर्थन नहीं करने के बारे में कुछ पढ़ा है, लेकिन मैंने पूरी तरह से जांच नहीं की है, जो कि शायद बाद की तारीख के लिए है।

वैसे भी, जैसा कि यह है, और एक लाइनर के लिए, यह IE ब्राउज़र और संस्करण का पता लगाने की मूल बातें कवर करेगा। यह एकदम सही है, लेकिन यह छोटा है और आसानी से संशोधित है।

बस संदर्भ के लिए, और अगर किसी को वास्तव में इसे लागू करने के बारे में किसी भी संदेह में है तो निम्नलिखित सशर्त मदद करनी चाहिए।

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

IE और इसके संस्करणों का पता लगाना आसान नहीं हो सकता है, और आपको बस एक ही चीज़ की आवश्यकता होती है:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

और यह इसका उपयोग करने का एक तरीका है:

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

कम संगतता दृश्यता / मोड में उच्च संस्करणों सहित सभी IE संस्करणों में काम करता है, और documentModeIE स्वामित्व है।


0

यदि आपको IE ब्राउज़र संस्करण को हटाने की आवश्यकता है तो आप नीचे दिए गए कोड का अनुसरण कर सकते हैं। यह कोड IE6 से IE11 संस्करण के लिए अच्छी तरह से काम कर रहा है

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                if (navigator.appName == 'Netscape') {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

विंडो रन IE10 + IE11 + के लिए ऑटो अपडेट होगा और इसे W3C मानकीकृत किया जाएगा

Nowaday, हमें IE8 का समर्थन करने की आवश्यकता नहीं है-

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.