当我想检测 IE 时,我使用以下代码:
function getInternetExplorerVersion() { 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.$1 ); } return rv; } function checkVersion() { var msg = "You're not using Internet Explorer."; var ver = getInternetExplorerVersion(); if ( ver > -1 ) { msg = "You are using IE " + ver; } alert( msg ); }
但是 IE11 正在返回“您没有使用 Internet Explorer”。我怎样才能检测到它?
IE11 不再报告为MSIE,根据此更改列表,它是有意避免错误检测的。
MSIE
如果您 真的 想知道它是 IE,您可以做的是检测Trident/用户代理中的字符串 if navigator.appNamereturn Netscape,例如(未测试的);
Trident/
navigator.appName
Netscape
function getInternetExplorerVersion() { 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.$1 ); } 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.$1 ); } return rv; } console.log('IE version:', getInternetExplorerVersion());
请注意,IE11 (afaik) 仍处于预览阶段,用户代理可能会在发布前更改。