207 debugging internet-explorer browser-detection forward-compatibility internet-explorer-11
当我想检测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 );
}
Run Code Online (Sandbox Code Playgroud)
但IE11正在返回"你没有使用Internet Explorer".我该如何检测它?
Joa*_*son 218
IE11不再报告MSIE,根据此更改列表,它有意避免错误检测.
如果你真的想知道它是什么你可以做IE是检测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());Run Code Online (Sandbox Code Playgroud)
请注意,IE11(afaik)仍处于预览状态,用户代理可能会在发布前更改.
mcw*_*933 85
用于!(window.ActiveXObject) && "ActiveXObject" in window显式检测IE11.
要检测任何IE(pre-Edge,"Trident")版本,请"ActiveXObject" in window改用.
Pau*_*tte 43
使用MSInputMethodContext为特征检测检查的一部分.例如:
//Appends true for IE11, false otherwise
window.location.hash = !!window.MSInputMethodContext && !!document.documentMode;
Run Code Online (Sandbox Code Playgroud)
参考
Fab*_*bio 15
我已经阅读了你的答案并进行了混合.它似乎适用于Windows XP(IE7/IE8)和Windows 7(IE9/IE10/IE11).
function ie_ver(){
var iev=0;
var ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var rv=navigator.userAgent.indexOf("rv:11.0");
if (ieold) iev=new Number(RegExp.$1);
if (navigator.appVersion.indexOf("MSIE 10") != -1) iev=10;
if (trident&&rv!=-1) iev=11;
return iev;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果我返回0,则表示没有IE.
Bee*_*jor 12
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
Run Code Online (Sandbox Code Playgroud)
工作原理:所有IE版本的用户代理字符串包括"MSIE 空间 版本 "或"Trident other-text rv space-or-colon version "部分.知道这一点,我们从String.match()正则表达式中获取版本号.阿try-catch块用于缩短的代码,否则我们需要以测试非IE浏览器阵列边界.
注意:如果用户将浏览器设置为"兼容模式",则可能会欺骗或省略用户代理,有时会无意中.虽然这在实践中似乎不是一个问题.
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
Run Code Online (Sandbox Code Playgroud)
工作原理:每个版本的IE都增加了对以前版本中没有的其他功能的支持.因此,我们可以自上而下的方式测试功能.一个三元序列在这里用于简洁,虽然if-then并switch声明将工作一样好.变量ie设置为整数5-11,对于较旧的设置为1,对于较新/非IE,设置为99.如果您只想准确测试IE 1-11,可以将其设置为0.
注意:如果您的代码在包含第三方脚本的页面上运行,对象检测可能会中断document.addEventListener.在这种情况下,用户代理是最佳选择.
如果您只对浏览器是否支持大多数HTML 5和CSS 3标准感兴趣,您可以合理地假设 IE 8及更低版本仍然是主要的问题应用程序.测试window.getComputedStyle将为您提供相当好的现代浏览器组合(IE 9,FF 4,Chrome 11,Safari 5,Opera 11.5).IE 9极大地改进了标准支持,但原生CSS动画需要IE 10.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );
Run Code Online (Sandbox Code Playgroud)
Angular JS就是这样做的.
msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
if (isNaN(msie)) {
msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
}
Run Code Online (Sandbox Code Playgroud)
msie将是正数,如果它的IE和NaN用于其他浏览器如chrome,firefox.
为什么?
从Internet Explorer 11开始,用户代理字符串发生了显着变化.
请参考:
小智 7
方案:
function GetIEVersion() {
var sAgent = window.navigator.userAgent;
var Idx = sAgent.indexOf("MSIE");
// If IE, return version number.
if (Idx > 0)
return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));
// If IE 11 then look for Updated user agent string.
else if (!!navigator.userAgent.match(/Trident\/7\./))
return 11;
else
return 0; //It is not IE
}
if ((GetIEVersion() > 0) || (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)){
alert("This is IE " + GetIEVersion());
}else {
alert("This no is IE ");
} Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217082 次 |
| 最近记录: |