JavaScript 判断 IE 与非 IE 浏览器的多种方法及版本识别
本文汇总了JavaScript中判断IE与非IE浏览器的多种方法,包括利用[[wp:a0]]等短代码技巧、基于window.attachEvent和document.all的特性检测,以及针对IE11和Edge的版本识别策略。同时探讨了通过UserAgent和特定对象(如ActiveXObject)区分主流浏览器及加壳浏览器的原则,强调优先使用特性检测以提高准确性。
JavaScript 判断 IE 与非 IE 浏览器的多种方法及版本识别
最近在司徒正美关于“全世界最短的IE浏览器判断代码”一文中,发现了一种仅需6字节即可判断IE与非IE浏览器的方法。其具体代码如下:
短代码判断技巧
<script>
if(!+[1,])alert("这是ie浏览器");
else alert("这不是ie浏览器");
</script>
下面推荐一种较为完善的代码,能够同时支持IE11与Edge浏览器的判断:
IE11与Edge支持方案
function isIE() {
if(!!window.ActiveXObject || "ActiveXObject" in window){
return true;
}else{
return false;
}
}
以下是更详细的扩展内容,供读者参考:
特性检测与扩展方法
var userAgent = navigator.userAgent;
var isIE10 = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //ie11以下
var isEdge = userAgent.indexOf("Edge") > -1 && !isIE10;
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
if (isIE()){
if(isIE11 || isEdge){
//not run
}else{
alert("可以放百度广告了,ie浏览器");
}
}
实际上,存在多种判断方法,大多数都是基于浏览器的特定行为或特性来实现的。
例如,Prototype库采用的方法是:!!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1)。该方法的原理是利用IE支持window.attachEvent来添加事件监听器,而非IE浏览器则使用window.addEventListener。其中,navigator.userAgent.indexOf('Opera') === -1这一条件是为了排除Opera浏览器,因为Opera能够伪装成IE。如果!!(window.attachEvent)为真,则判定为IE;反之,如果!window.addEventListener为真,同样可以判定为IE。
Ext框架使用的是!"1"[0],它利用了IE无法通过数组下标访问字符串这一特性来进行判断。不过,在IE8版本中,这种方法似乎存在一些问题。
在!+[1,]这一技巧被发现之前,判断IE的最短表达式是 !+"\v1"。它利用了IE不支持垂直制表符这一特性。
过去还有一个常用的方法是检测document.all,但由于Opera浏览器也能伪装成IE,因此需要这样书写:!!(document.all && navigator.userAgent.indexOf('Opera') === -1)。
此处先记录上述几条,以便在工作时查阅。
1. +[1,] 2. !+"\v1" 3. !!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1) 4. !!(!window.addEventListener&& navigator.userAgent.indexOf('Opera') === -1) 5. !!(document.all && navigator.userAgent.indexOf('Opera') === -1)
判断IE浏览器的具体版本
IE版本识别函数
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浏览器
}
}
JS通过内核判断各种浏览器|区分360与谷歌(现在不能用了曾经可以用)
浏览器信息获取与分类
function getBrowserInfo(){
var ua = navigator.userAgent.toLocaleLowerCase();
var browserType=null;
if (ua.match(/msie/) != null || ua.match(/trident/) != null) {
browserType = "IE";
browserVersion = ua.match(/msie ([\d.]+)/) != null ? ua.match(/msie ([\d.]+)/)[1] : ua.match(/rv:([\d.]+)/)[1];
} else if (ua.match(/firefox/) != null) {
browserType = "火狐";
}else if (ua.match(/ubrowser/) != null) {
browserType = "UC";
}else if (ua.match(/opera/) != null) {
browserType = "欧朋";
} else if (ua.match(/bidubrowser/) != null) {
browserType = "百度";
}else if (ua.match(/metasr/) != null) {
browserType = "搜狗";
}else if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) {
browserType = "QQ";
}else if (ua.match(/maxthon/) != null) {
browserType = "遨游";
}else if (ua.match(/chrome/) != null) {
var is360 = _mime("type", "application/vnd.chromium.remoting-viewer");
function _mime(option, value) {
var mimeTypes = navigator.mimeTypes;
for (var mt in mimeTypes) {
if (mimeTypes[mt][option] == value) {
return true;
}
}
return false;
}
if(is360){
browserType = '360';
}else{
$('html').css("zoom",".80");
}
}else if (ua.match(/safari/) != null) {
browserType = "Safari";
}
}
浏览器类型判断原则
只有在原生Chrome中存在一种MimeType“application/vnd.chromium.remoting-viewer”,由此可以判断浏览器是加壳Chrome或是原生Chrome。 再如,只有IE内核的浏览器存在ActiveXObject对象。由此可以判断是否为IE浏览器
判断浏览器类型,我们需要遵循以下原则: 1、采取命中特征原则,当且仅当完全符合区分浏览器的特征时我们才会采用此特征。例如单纯通过UA中MSIE来检测是否为IE浏览器是不可靠的。而通过判断是否存在MimeType“application/vnd.chromium.remoting-viewer”来断言原生Chrome在现阶段来看是可行性,但也不保证永久有效。 2、对于主流浏览器来说一般不存在UserAgent关键字冲突,但对于许多加壳浏览器者就不一定了。再次提出某数字浏览器,userAgent干脆和IE一模一样,但渲染模式等等不不知道动了什么手脚,与标准IE行为差异很大。通过userAgent来判断浏览器时,优先命中浏览器特征字。匹配则基本确定为该浏览器,但未匹配也并不代表不是此浏览器。请悉知。 3、优先使用浏览器特性来区分浏览器,因为这个准确性较高。其次再采用userAgent辅助判断,从而达到最高的匹配度。 4、优先检测第三方加壳浏览器,目前并未有十分好的方案,只能枚举大部分世面上存在并可以判断的浏览器,其他未匹配任何规则的浏览器,为了兼容,请将规则落到四大浏览器之一。 5、判断浏览器版本,仅仅是为了针对特定浏览器进行优化,需要有特定的业务场景需要才要这么做。或者当某个浏览器出现兼容问题时,紧急添加针对浏览器的补丁代码时才判断。更加科学稳妥的办法是使用标准的JS函数和API,页面元素和样式设计遵循W3C标准。可能存在争议的兼容性问题尽可能采用第三方框架如jQuery。这才是解决兼容性问题的根本。
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
