JS判断当前是否是IE浏览器,并返回时IE几?

本文提供了一个JavaScript函数,用于检测用户的浏览器是否为IE及其版本号。该函数能够区分不同的IE版本(包括IE7到IE11),同时也能识别非IE浏览器及Edge浏览器。

原文参考:

https://www.cnblogs.com/liuyanxia/p/5855760.html

具体代码示例:

这里返回的是:如果不是IE浏览器返回 -1 ,返回 7/8/9/10/11 对应的就是当前IE的版本。

IEVersion();
function IEVersion() {
    var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串  
    var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器  
    var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器  
    var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
    if(isIE) {
        var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
        reIE.test(userAgent);
        var fIEVersion = parseFloat(RegExp["$1"]);
        if(fIEVersion == 7) {
            return 7;
        } else if(fIEVersion == 8) {
            return 8;
        } else if(fIEVersion == 9) {
            return 9;
        } else if(fIEVersion == 10) {
            return 10;
        } else {
            return 6;//IE版本<=7
        }   
    } else if(isEdge) {
        return 'edge';//edge
    } else if(isIE11) {
        return 11; //IE11  
    }else{
        return -1;//不是ie浏览器
    }
}

 

转载于:https://www.cnblogs.com/e0yu/p/9015821.html

<think> 我们正在寻找判断是否为IE浏览器的方法。根据引用内容,有三种主要方法: 方法1(引用[1]):使用`window.ActiveXObject`或`"ActiveXObject" in window`检测 ```javascript function isIE() { return !!window.ActiveXObject || "ActiveXObject" in window; } ``` 方法2(引用[2]):利用数组尾随逗号在IE和非IE浏览器中的解析差异 ```javascript var isIE = !+[1,]; // 在IE中为true,非IE中为false ``` 方法3(引用[3]):使用`document.documentMode`(仅IE支持) ```javascript function isIE() { return !!document.documentMode; } ``` ### 推荐方案 **组合检测法(最可靠)**: ```javascript function isIE() { return !!document.documentMode || !!window.ActiveXObject || "ActiveXObject" in window; } ``` ### 各方法原理分析 1. **ActiveXObject检测**: - IE浏览器特有对象(用于ActiveX控件)[^1] ```javascript !!window.ActiveXObject // 显式检查 "ActiveXObject" in window // 隐式检查 ``` 2. **数组逗号解析差异**: - IE解析`[1,]`为含两个元素的数组(尾随逗号保留) - 非IE解析为单元素数组(尾随逗号被忽略)[^2] ```javascript +[1,] // IE: NaN → !NaN=true; 非IE: 1 → !1=false ``` 3. **documentMode属性**: - 仅IE5+支持该属性,值等于当前渲染引擎版本号[^3] ```javascript document.documentMode // IE返回数字(7/8/9/10/11), 非IE返回undefined ``` ### 使用建议 1. **标准场景**: ```javascript if (isIE()) { // IE专属处理逻辑 } ``` 2. **获取IE版本**(引用[3]扩展): ```javascript function getIEVersion() { if (document.documentMode) return document.documentMode; // 旧版IE版本嗅探(需解析userAgent) const ua = navigator.userAgent; if (ua.indexOf('MSIE 10') > -1) return 10; if (ua.indexOf('MSIE 9') > -1) return 9; if (ua.indexOf('MSIE 8') > -1) return 8; return 7; // 最低兼容版本 } ``` ### 注意事项 - **Edge浏览器**:新版Edge(Chromium内核)不会被识别为IE - **兼容模式**:IE开启兼容模式`documentMode`返回兼容的版本号 - **性能优化**:避免重复检测,结果可缓存 §§相关问题§§ 1. 如何区分IE和Edge浏览器? 2. 怎样在React中优雅地处理IE兼容性问题? 3. 有哪些仅支持现代浏览器的JavaScript特性? 4. 如何为IE浏览器加载polyfill? </think> ### 判断IE浏览器的可靠方法 以下是三种经过验证的IE浏览器检测方法,根据实际场景选择合适方案: #### 方法1:ActiveX对象检测(兼容旧版IE) ```javascript function isIE() { return !!window.ActiveXObject || "ActiveXObject" in window; } ``` **原理**: IE浏览器特有`ActiveXObject`接口,其他浏览器均不支持[^1]。 **适用场景**: - IE 5 - IE 11全系列兼容 - Edge浏览器返回`false` --- #### 方法2:documentMode属性检测(推荐) ```javascript function isIE() { return !!document.documentMode; } ``` **原理**: `document.documentMode`是IE独有的属性,返回值即IE版本号: - `7` → IE7模式 - `8` → IE8模式 - `9` → IE9模式 - `10` → IE10模式 - `11` → IE11模式[^3] **优势**: - 代码简洁 - 准确识别渲染引擎模式 - 兼容IE7+ --- #### 方法3:JavaScript语法差异检测(巧妙但非常规) ```javascript function isIE() { return !+[1,]; } ``` **原理**: 利用IE对数组尾随逗号的特殊解析: - IE:`[1,]` → 两个元素 `[1, undefined]` → `+[1,]` = `NaN` - 非IE:`[1,]` → 单元素 `[1]` → `+[1]` = `1` 通过`!NaN === true`特性实现检测[^2] --- ### 综合方案(推荐) ```javascript function detectIE() { const ua = window.navigator.userAgent; // Edge检测 (Edge含Trident标识) if (ua.indexOf("Edg/") > -1) return { isIE: false, version: "Edge" }; // documentMode方案 if (document.documentMode) { return { isIE: true, version: document.documentMode }; } // ActiveX降级方案 if (!!window.ActiveXObject || "ActiveXObject" in window) { const matches = ua.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/); return { isIE: true, version: matches ? parseInt(matches[1]) : "unknown" }; } return { isIE: false }; } ``` ### 使用示例 ```javascript const result = detectIE(); if (result.isIE) { console.log(`IE浏览器检测: ${result.version}`); // IE专属兼容逻辑 } else { console.log("非IE浏览器"); } ``` ### 注意事项 1. **Edge浏览器**:现代Edge使用Chromium内核,需单独检测(示例已包含) 2. **兼容模式**:IE兼容模式会修改`documentMode`值 3. **性能优化**:检测结果建议缓存,避免重复计算 4. **用户代理伪造**:部分浏览器支持修改UA,但`documentMode`无法伪造 > 最新统计:IE全球份额已低于0.5%[^4],建议业务中逐步放弃IE支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值