Проверьте, если пользователь использует IE с jQuery
Я вызываю функцию, подобную приведенной ниже, нажав на divs с определенным классом.
есть ли способ проверить при запуске функции, если пользователь использует Internet Explorer и прервать / отменить его, если они используют другие браузеры, так что он работает только для пользователей IE ? Пользователи здесь все будут на IE8 или более высоких версиях, поэтому мне не нужно будет покрывать IE7 и более низкие версии.
Если бы я мог сказать, какой браузер они используют, это было бы здорово, но это не так требуемый.
пример:
$('.myClass').on('click', function(event)
{
// my function
});
27 ответов:
используйте ниже JavaScript метод:
function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; }вы можете найти подробную информацию на ниже сайте поддержки Microsoft:
как определить версию браузера от скрипта
обновление : (поддержка IE 11)
function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; }
начиная с Internet Explorer 12+ (aka Edge), Строка Агента Пользователя изменился, еще раз.
/** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ function detectIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; }пример использования:
alert('IE ' + detectIE());строка по умолчанию IE 10:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)строка по умолчанию IE 11:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Geckoстрока по умолчанию IE 12 (aka Edge):
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 (thx @DrCord):
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строка по умолчанию ребра 14:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300по умолчанию строка край 15:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063строка по умолчанию ребра 16:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299строка по умолчанию ребра 17:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134строка по умолчанию Edge 18 (Insider preview):
Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730тест на CodePen:
просто добавляя к чрезвычайно полезному ответу Марио.
Если все, что вы хотите знать, если браузер IE или нет, код может быть упрощен до:
var ms_ie = false; var ua = window.navigator.userAgent; var old_ie = ua.indexOf('MSIE '); var new_ie = ua.indexOf('Trident/'); if ((old_ie > -1) || (new_ie > -1)) { ms_ie = true; } if ( ms_ie ) { //IE specific code goes here }обновление
Я рекомендую это сейчас. Это все еще очень читабельно и гораздо меньше кода:)
var ua = window.navigator.userAgent; var is_ie = /MSIE|Trident/.test(ua); if ( is_ie ) { //IE specific code goes here }спасибо JohnnyFun в комментариях за сокращенный ответ:)
возвращает
trueдля любой версии Internet Explorer:function isIE(userAgent) { userAgent = userAgent || navigator.userAgent; return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1; }The
userAgentпараметр является необязательным и по умолчанию используется пользовательский агент браузера.
вы можете использовать объект navigator для обнаружения user-navigator, вам не нужен jquery для него
<script type="text/javascript"> if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ // do stuff with ie-users } </script>
вот как команда Angularjs делает это ( v 1.6.5):
var msie, // holds major version number for IE, or NaN if UA is not IE. // Support: IE 9-11 only /** * documentMode is an IE-only property * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx */ msie = window.document.documentMode;тогда есть несколько строк кода, разбросанных по всему его использованию в качестве числа, такого как
if (event === 'input' && msie <= 11) return false;и
if (enabled && msie < 8) {
используя ответы выше; простой & сжатый возвращающий логический:
var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);
01 метод:
$.браузер является устаревшим в jQuery версии 1.3 и удалены в 1.9if ( $.browser.msie) { alert( "Hello! This is IE." ); }способ 02:
Использование Условных Комментариев<!--[if gte IE 8]> <p>You're using a recent version of Internet Explorer.</p> <![endif]--> <!--[if lt IE 7]> <p>Hm. You should upgrade your copy of Internet Explorer.</p> <![endif]--> <![if !IE]> <p>You're not using Internet Explorer.</p> <![endif]>метод 03:
/** * Returns the version of Internet Explorer or a -1 * (indicating the use of another browser). */ function getInternetExplorerVersion() { 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. ); } 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 ); }способ 04:
Используйте JavaScript / Ручное Обнаружение/* Internet Explorer sniffer code to add class to body tag for IE version. Can be removed if your using something like Modernizr. */ 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]); //append class to body for use with browser support if (v > 4) { $('body').addClass('ie' + v); } }());
function detectIE() { var ua = window.navigator.userAgent; var ie = ua.search(/(MSIE|Trident|Edge)/); return ie > -1; }
используя modernizr
Modernizr.addTest('ie', function () { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE ') > 0; var ie11 = ua.indexOf('Trident/') > 0; var ie12 = ua.indexOf('Edge/') > 0; return msie || ie11 || ie12; });
Если вы не хотите использовать useragent, вы также можете просто сделать это для проверки того, является ли браузер IE. Комментируемый код фактически работает в браузерах IE и превращает "false" в "true".
var isIE = /*@cc_on!@*/false; if(isIE){ //The browser is IE. }else{ //The browser is NOT IE. }
Я знаю, что это старый вопрос, но в случае, если кто-то столкнется с ним снова и имеет проблемы с обнаружением IE11, вот рабочее решение для всех текущих версий IE.
var isIE = false; if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { isIE = true; }
я использовал этот
function notIE(){ var ua = window.navigator.userAgent; if (ua.indexOf('Edge/') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('MSIE ') > 0){ return false; }else{ return true; } }
еще одна простая (но читаемая человеком) функция для определения, является ли браузер IE или нет (игнорируя край, что совсем не плохо):
function isIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); // IE 10 or older var trident = ua.indexOf('Trident/'); //IE 11 return (msie > 0 || trident > 0); }
попробуйте это, если вы используете версия jquery >=1.9,
var browser; 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) || /(Trident)[\/]([\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 ($.браузер был удален в jQuery 1.9) вместо этого используйте следующий код:
$('.myClass').on('click', function (event) { if ($.browser.msie) { alert($.browser.version); } });
решение @ SpiderCode не работает с IE 11. Вот лучшее решение, которое я использовал отныне в моем коде, где мне нужно обнаружение браузера для конкретной функции.
IE11 больше не сообщает как MSIE, согласно этому списку изменений, это намеренно, чтобы избежать неправильного обнаружения.
что вы можете сделать, если вы действительно хотите знать, что это IE, чтобы обнаружить трезубец/ строку в Агенте пользователя, если навигатор.appName возвращает Netscape, что-то вроде (the непроверенные);
спасибо ответ
function isIE() { var rv = -1; 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. ); } else 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. ); } return rv == -1 ? false: true; }
ниже я нашел элегантный способ сделать это во время googling ---
/ detect IE var IEversion = detectIE(); if (IEversion !== false) { document.getElementById('result').innerHTML = 'IE ' + IEversion; } else { document.getElementById('result').innerHTML = 'NOT IE'; } // add details to debug result document.getElementById('details').innerHTML = window.navigator.userAgent; /** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ function detectIE() { var ua = window.navigator.userAgent; // Test values; Uncomment to check result … // 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'; // IE 12 / Spartan // 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 (IE 12+) // 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 msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; }
здесь много ответов, и я хотел бы добавить свой вклад. IE 11 был такой задницей в отношении flexbox (см. Все его проблемы и несоответствия здесь) что мне действительно нужен простой способ проверить, использует ли пользователь любой браузер IE (до и включая 11), но исключая Edge, потому что Edge на самом деле довольно хороший.
основываясь на ответах, приведенных здесь, я написал простую функцию, возвращающую глобальную булеву переменную, которую затем можно использовать в строке. Это очень легко проверять для IE.
var isIE; (function() { var ua = window.navigator.userAgent, msie = ua.indexOf('MSIE '), trident = ua.indexOf('Trident/'); isIE = (msie > -1 || trident > -1) ? true : false; })(); if (isIE) { alert("I am an Internet Explorer!"); }таким образом, вам нужно только один раз выполнить поиск, и вы сохраняете результат в переменной, а не извлекаете результат при каждом вызове функции. (Насколько я знаю, вам даже не нужно ждать документа, готового выполнить этот код, поскольку пользовательский агент не связан с DOM.)
обновите ответ SpiderCode, чтобы исправить проблемы, когда строка "MSIE" возвращает -1, но она соответствует "трезубцу". Раньше он возвращал NAN, но теперь возвращает 11 для этой версии IE.
function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > -1) { return ua.substring(msie + 5, ua.indexOf(".", msie)); } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) { return 11; } else { return false; } }
вы можете dectect все интернет-обозревателя (последняя версия проверена 12).
<script> var $userAgent = ''; if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){ $userAgent='ie'; } else { $userAgent='other'; } alert($userAgent); </script>смотрите здесь https://jsfiddle.net/v7npeLwe/
function msieversion() { var ua = window.navigator.userAgent; console.log(ua); var msie = ua.indexOf("MSIE "); if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { // If Internet Explorer, return version numbe // You can do what you want only in IE in here. var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))); if (isNaN(version_number)) { var rv_index=ua.indexOf("rv:"); version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index))); } console.log(version_number); } else { //other browser console.log('otherbrowser'); } }вы должны увидеть результат в консоли, пожалуйста, используйте chrome Inspect.
Я поместил этот код в функцию готовности документа, и он запускается только в internet explorer. Протестировано в Internet Explorer 11.
var ua = window.navigator.userAgent; ms_ie = /MSIE|Trident/.test(ua); if ( ms_ie ) { //Do internet explorer exclusive behaviour here }
Я думаю, что это поможет вам здесь
function checkIsIE() { var isIE = false; if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { isIE = true; } if (isIE) // If Internet Explorer, return version number { kendo.ui.Window.fn._keydown = function (originalFn) { var KEY_ESC = 27; return function (e) { if (e.which !== KEY_ESC) { originalFn.call(this, e); } }; }(kendo.ui.Window.fn._keydown); var windowBrowser = $("#windowBrowser").kendoWindow({ modal: true, id: 'dialogBrowser', visible: false, width: "40%", title: "Thông báo", scrollable: false, resizable: false, deactivate: false, position: { top: 100, left: '30%' } }).data('kendoWindow'); var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>'; html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>'; html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />'; html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />'; html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>'; windowBrowser.content(html); windowBrowser.open(); $("#windowBrowser").parent().find(".k-window-titlebar").remove(); } else // If another browser, return 0 { return false; } }
это работает только ниже версии IE 11.
var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));
console.log("version number",ie_version);
или это действительно короткая версия, возвращает true, если браузеры Internet Explorer:
function isIe() { return window.navigator.userAgent.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./); }
Comments