2013-10-24 8 views
10

को अपग्रेड करने के लिए एक मोडल फेंक दें मैं jQuery का उपयोग करके IE9 या उससे कम का पता लगाने में सक्षम होना चाहता हूं (या यदि कोई बेहतर तरीका है?)। यदि ब्राउज़र संस्करण IE9 या उससे कम है तो मैं क्रोम, एफएफ इत्यादि में अपग्रेड करने के विकल्प के साथ एक मोडल लोड करना चाहता हूं।jQuery ब्राउज़र IE9 और नीचे का पता लगाएं और

मैंने पढ़ा है कि $ .browser अब और काम नहीं करता है, तो बस सोच रहा है कि सबसे अच्छा तरीका क्या है प्राप्त करने के लिए मैं क्या चाहते है:

$(document).ready(function(){ 

    /* Get browser */ 
    $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); 

    /* Detect Chrome */ 
    if($.browser.chrome){ 
     /* Do something for Chrome at this point */ 
     alert("You are using Chrome!"); 

     /* Finally, if it is Chrome then jQuery thinks it's 
     Safari so we have to tell it isn't */ 
     $.browser.safari = false; 
    } 

    /* Detect Safari */ 
    if($.browser.safari){ 
     /* Do something for Safari */ 
     alert("You are using Safari!"); 
    } 

}); 
+3

केवल IE9 के लिए एक सशर्त टिप्पणी का प्रयोग करें। इस तरह आपको बदसूरत उपयोगकर्ता एजेंट स्ट्रिंग को स्नीफ करने के बारे में चिंता करने की आवश्यकता नहीं है। –

+0

आप इस http://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx – UDB

+1

का उल्लेख कर सकते हैं भले ही यह प्रश्न पुराना है और पहले से ही इसका उत्तर है, मुझे लगता है कि मुझे आवश्यकता है सुझाव देते हैं कि आप अपने उपयोगकर्ताओं को सतर्क करने के लिए एक मोडल का उपयोग न करें। पुराने ब्राउज़र उचित रूप से एक मोडल प्रदर्शित करने को संभाल नहीं पाते हैं, इसलिए यदि कोई उपयोगकर्ता IE5 का उपयोग कर रहा है उदाहरण के लिए, अलर्ट प्रकट नहीं हो सकता है। – DavidB

उत्तर

11

आईई versio पता लगाने के लिए jQuery का उपयोग न करें एनएस। इसके बजाए सशर्त टिप्पणियों का प्रयोग करें।

क्यों? अच्छी तरह से सोचें कि आप इन पुराने संस्करणों को पहली जगह क्यों लक्षित करना चाहते हैं। ऐसा शायद इसलिए है क्योंकि वे आपको आवश्यक कुछ जेएस/सीएसएस सुविधाओं का समर्थन नहीं करते हैं। तो क्या आप वास्तव में अपना खुद का जेएस कोड बनाए रखना चाहते हैं जो आपको यकीन है कि इन पुराने संस्करणों में आप चलेंगे? यदि आप उस मार्ग पर जाते हैं तो आपको इस बारे में सोचना शुरू करना होगा कि आपके द्वारा लिखे गए पहचान कोड IE6 या 5 या 4 में काम करेंगे ... दर्दनाक!

इसके बजाय निम्न प्रयास करें:

  1. अपने HTML करने के लिए अपने मॉडल/बैनर तत्व जोड़ें।
  2. अपनी मुख्य सीएसएस फ़ाइल में, प्रदर्शन का उपयोग करके इस तत्व को छुपाएं: कोई नहीं। यह सुनिश्चित करता है कि आईई और गैर-आईई ब्राउज़र के हाल के संस्करण इसे नहीं देख पाएंगे।
  3. आईई केवल सीएसएस या जेएस फ़ाइल बनाएं जो इस तत्व को प्रकट करेगा।
  4. इस फ़ाइल को सशर्त टिप्पणियों के अंदर शामिल करें जो आपके इच्छित आईई संस्करणों को लक्षित करते हैं।

नीचे दिया गया उदाहरण सीएसएस का उपयोग करके एक सरल खुलासा का उपयोग करता है लेकिन यदि आप चाहें तो आसानी से इसे जेएस के साथ बदल सकते हैं। बस इसे बहुत जटिल न बनाएं या यह शुरुआती आईई संस्करणों में आसानी से टूट सकता है।

#index.html 
<html> 
    <head> 
    <link rel="stylesheet" type="text/css" href="main.css"> 
    <!--[if lte IE 9]> 
     <link rel="stylesheet" type="text/css" href="ie-only.css"> 
    <![endif]--> 
    </head> 
    <body> 
    <div class="ie-only">Go upgrade your browser!</div> 
    </body> 
</html> 

#main.css 
.ie-only { display: none } 

#ie-only.css 
.ie-only { display: block } 

यहाँ एक उपयोगी conditional comments reference है।

0

$.browser() अपनी स्क्रिप्ट में कोड नीचे jquery version 1.9 उपयोग में हटाने है

(function($) { 

    var matched, browser; 

    // Use of jQuery.browser is frowned upon. 
    // More details: http://api.jquery.com/jQuery.browser 
    // jQuery.uaMatch maintained for back-compat 
    jQuery.uaMatch = function(ua) { 
     ua = ua.toLowerCase(); 

     var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 
      /(webkit)[ \/]([\w.]+)/.exec(ua) || 
      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 
      /(msie) ([\w.]+)/.exec(ua) || 
      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 
      []; 

     return { 
      browser: match[ 1 ] || "", 
      version: match[ 2 ] || "0" 
     }; 
    }; 
    // Don't clobber any existing jQuery.browser in case it's different 
    if (!jQuery.browser) { 
     matched = jQuery.uaMatch(navigator.userAgent); 
     browser = {}; 

     if (matched.browser) { 
      browser[ matched.browser ] = true; 
      browser.version = matched.version; 
     } 

    // Chrome is Webkit, but Webkit is also Safari. 
     if (browser.chrome) { 
      browser.webkit = true; 
     } else if (browser.webkit) { 
      browser.safari = true; 
     } 
     jQuery.browser = browser; 
    } 
})(jQuery); 
15
var browser = { 
     isIe: function() { 
      return navigator.appVersion.indexOf("MSIE") != -1; 
     }, 
     navigator: navigator.appVersion, 
     getVersion: function() { 
      var version = 999; // we assume a sane browser 
      if (navigator.appVersion.indexOf("MSIE") != -1) 
       // bah, IE again, lets downgrade version number 
       version = parseFloat(navigator.appVersion.split("MSIE")[1]); 
      return version; 
     } 
    }; 

if (browser.isIe() && browser.getVersion() <= 9) { 

    console.log("You are currently using Internet Explorer" + browser.getVersion() + " or are viewing the site in Compatibility View, please upgrade for a better user experience.") 
} 
+2

नोट आईई 11 में अब 'एमएसआईई' शामिल नहीं है। – mikemaccana

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

'navigator.appVersion.split (" MSIE ") [1]' एक स्ट्रिंग है, संख्या नहीं, उदा। : '9.0; विंडोज एनटी 6.1; WOW64; ट्राइडेंट/5.0; SLCC2; .NET CLR 2.0.50727; .NET सीएलआर 3.5.3072 9; .NET CLR 3.0.30729; मीडिया सेंटर पीसी 6.0; .NET4.0C; .NET4.0E; एमएस-आरटीसी एलएम 8) ' – dude

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