JavaScript做浏览器检测

最近看了一些面试题,有些还比较有意思,所以拿出来分享一下

1、最短IE浏览器检测

if(!-[1,])//我试了多次,在windows10的ie不行啊
    console.log("这是ie浏览器");   

变种 还有 !+[1,],这个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见这里 恭喜你,Aleko ,你真是我的偶像!
据说之前还有 var ie = !+"\v1"; 7个字节的《32 bytes, ehr … 9, ehr … 7!!! to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事 。

2、事件监听区分

IE: window.attachEvent 非IE:window.addEventListener

if (window.attachEvent) { 
      window.attachEvent("onload", remove); 
} else if (window.addEventListener) { 
      window.addEventListener("load", remove, false);   
}             
function remove() { 
   var div = document.getElementByIdx_x("divprogressbar"); 
                document.body.removeChild(div); 
} 
//或者也可以用
if (document.all){//IE
    window.attachEvent('onload',remove)
}else{//FireFox
    window.addEventListener('load',remove,false);
} 

3、属性检测 document.all 方法

if(document.all){ 
   //IE代码 
}else{ 
  //其他 
} 

其实这么做不够,document.all能区分出FireFox,却无法区分Opera,因为Opera支持document.all.
我现在的做法是:
var isIE = document.all && window.external;

Opera不支持window.external,所以这么做就比较保险了。

4、浏览器属性

navigator.userAgent 来检测

function getExplorer() {
    var explorer = window.navigator.userAgent ;
    //ie 
    if (explorer.indexOf("MSIE") >= 0) {
        alert("ie");
    }
    //firefox 
    else if (explorer.indexOf("Firefox") >= 0) {
        alert("Firefox");
    }
    //Chrome
    else if(explorer.indexOf("Chrome") >= 0){
        alert("Chrome");
    }
    //Opera
    else if(explorer.indexOf("Opera") >= 0){
        alert("Opera");
    }
    //Safari
    else if(explorer.indexOf("Safari") >= 0){
        alert("Safari");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值