2013-03-27 1 views
4

У меня есть код jQuery, который отлично работает для Chrome/Mozilla, но не IE.Идентифицировать IE9/IE10 с помощью jQuery

if ($("html").hasClass("ie")) { 
    $(function(){ 
     $('.green-column, .red-column, .grey-column').click(function() { 
      alert ($(this).attr("data-type"));   
     }); 
    }); 
} 
else { 
$(function(){ 
     $('.green-column, .red-column, .grey-column').click(function() { 
     $("<div title='Selected Task is:'>" + $(this).attr("data-type") + "</div>").dialog({ 
      modal: true, 
      resizable: false, 
      buttons: [ 
       { 
        text: "OK", 
        click: function() { $(this).dialog("close"); } 
       } 
      ] 
     }); 
    }); 
}); 
} 
</script> 
<!--[if IE 7]> <html lang="en-us" class="ie"> <![endif]--> 
<!--[if IE 8]> <html lang="en-us" class="ie"> <![endif]--> 
<!--[if gt IE 8]><!--> <html lang="en-us" class="ie"> <!--<![endif]--> 

Так я планирую использовать оповещение для IE9/IE10, но я не в состоянии различать между браузерами. Может ли кто-нибудь сказать мне, как идентифицировать IE9/IE10 в jQuery/HTML?

+0

Это не хорошо, чтобы отличаться между браузерами, ни запретить доступ для браузера. JQuery должен работать с IE 9 и 10, поэтому, возможно, в вашем коде HTML или CSS произошел сбой. Попытайтесь исправить это и не используйте обнюхивание браузером. – Eich

+1

Если у вас есть ошибка рендеринга, которая встречается только в определенном браузере и единственный способ ее исправить, нужно сменить slideUp() на hide(). Только для некоторых браузеров ... – Jaap

ответ

14

Может быть достигнута без использования библиотек или условной компиляции:

if (document.addEventListener) { 
    alert("IE9 or greater"); 
} 

if (window.requestAnimationFrame) { 
    alert("IE10 or greater"); 
} 
+5

Kinda offtopic comment, но вы можете использовать эти 2 условия для проверки специально для 'IE9':' if (document.addEventListener &&! window.requestAnimationFrame) {alert ("IE9")} ' –

7

Просто сделай, как этот

if ($.browser.msie && parseInt($.browser.version, 10) > 8) { 
    alert('IE9 or IE10'); 
} else { 
    alert('Non IE9 or IE10'); 
} 

Это должно работать для JQuery версии под 1.9. Если вы используете 1.9+, прочитайте это thread или рассмотрите возможность использования modernizr.

+4

Это больше не работает в текущих версиях jQuery. – dersvenhesse

+0

@svenhesse Только в 1.9+ – mattytommo

+4

Это работает только в версиях jquery до 1.9. $ .browser был удален из версий> 1.9. – tbem

2

Старые версии jQuery до 1.9 предложили $.browser, чтобы получить это. Теперь jQuery хочет, чтобы вы проверяли функции вместо $.support. (http://modernizr.com/). Modernizr добавляет классы к вашему корневому элементу, например msie или ie9 или webkit или touch и так далее.

Таким образом, вы можете легко проверить:

if ($('html').hasClass('ie9')) { 
    // do something 
} 
+0

Как насчет того, чтобы делать «if ($ ('html»). Is ('. Ie6, .ie7 '))??Есть ли недостатки или проблемы с использованием чего-то простого, как с jquery? Это также требует модернизации? – Bryan

+1

У вас не было бы классов типа 'ie7', используя только jQuery. – dersvenhesse

6

Единственный надежный способ обнаружить текущую активную версию IE (возможно эмулированную) является объединение conditional compilation и document.documentMode чек.

Условная компиляция не обязательна, но позволяет никогда не запускать сценарий обнаружения IE для браузеров, отличных от IE.

Например:

if (/*@cc_on [email protected]*/false && (
     document.documentMode === 9 || document.documentMode === 10) 
    ) { 
    // IE 9 or 10 (not 8 or 11!) 
    document.documentElement.className += ' ie9 ie10'; 
} 

предыдущий код не является безопасным против minifiers. Если вы собираетесь Минимизировать код, поставить условную компиляцию материал в виде строки, и eval его:

if (eval('/*@cc_on [email protected]*/false') && (...)) { ... } 
+0

Я ранее не знал об условной компиляции JS в IE. Весь предмет подробно объясняется @ http://msdn.microsoft.com/en-us/library/ie/8ka90k2e(v=vs.94).aspx –

+0

@ElanHasson Условная компиляция была удалена из IE11. 'document.documentMode' все еще существует. –

+0

Хе-хе, не то, что большая сделка .. к тому времени у нас будут лучшие стандарты кросс-браузера, и это будет наследие (Pre-IE10 и Post IE10) :) –

1

Я знаю, что это старый вопрос. но в случае, если вы не нашли ответа.

Show a message if the browser is not internet explorer 9 or greater

browser={}; 
if (/(chrome\/[0-9]{2})/i.test(navigator.userAgent)) { 
    browser.agent = navigator.userAgent.match(/(chrome\/[0-9]{2})/i)[0].split("/")[0]; 
    browser.version = parseInt(navigator.userAgent.match(/(chrome\/[0-9]{2})/i)[0].split("/")[1]); 
} else if (/(firefox\/[0-9]{2})/i.test(navigator.userAgent)) { 
    browser.agent = navigator.userAgent.match(/(firefox\/[0-9]{2})/i)[0].split("/")[0]; 
    browser.version = parseInt(navigator.userAgent.match(/(firefox\/[0-9]{2})/i)[0].split("/")[1]); 
} else if (/(MSIE\ [0-9]{1})/i.test(navigator.userAgent)) { 
    browser.agent = navigator.userAgent.match(/(MSIE\ [0-9]{1})/i)[0].split(" ")[0]; 
    browser.version = parseInt(navigator.userAgent.match(/(MSIE\ [0-9]{1})/i)[0].split(" ")[1]); 
} else if (/(Opera\/[0-9]{1})/i.test(navigator.userAgent)) { 
    browser.agent = navigator.userAgent.match(/(Opera\/[0-9]{1})/i)[0].split("/")[0]; 
    browser.version = parseInt(navigator.userAgent.match(/(Opera\/[0-9]{1})/i)[0].split("/")[1]); 
} else if (/(Trident\/[7]{1})/i.test(navigator.userAgent)) { 
    browser.agent = "MSIE"; 
    browser.version = 11; 
} else { 
    browser.agent = false; 
    browser.version = false; 
} 

if (/(Windows\ NT\ [0-9]{1}\.[0-9]{1})/.test(navigator.userAgent)) { 
    browser.os = "Windows"; 
    switch(parseFloat(navigator.userAgent.match(/(Windows\ NT\ [0-9]{1}\.[0-9]{1})/)[0].split(" ")[2])) { 
    case 6.0: 
     browser.osversion = "Vista"; 
     break; 
    case 6.1: 
     browser.osversion = "7"; 
     break; 
    case 6.2: 
     browser.osversion = "8"; 
     break; 
    default: 
     browser.osversion = false; 
    } 
} else if (/(OS\ X\ [0-9]{2}\.[0-9]{1})/.test(navigator.userAgent)) { 
    browser.os = "OS X"; 
    browser.osversion = navigator.userAgent.match(/(OS\ X\ [0-9]{2}\.[0-9]{1})/)[0].split(" ")[2]; 
} else if (/(Linux)/.test(navigator.userAgent)) { 
    browser.os = "Linux"; 
    browser.osversion = false; 
}