最近看了一些面试题,有些还比较有意思,所以拿出来分享一下
1、最短IE浏览器检测
if(!-[,])//我试了多次,在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") >= ) {
alert("ie");
}
//firefox
else if (explorer.indexOf("Firefox") >= ) {
alert("Firefox");
}
//Chrome
else if(explorer.indexOf("Chrome") >= ){
alert("Chrome");
}
//Opera
else if(explorer.indexOf("Opera") >= ){
alert("Opera");
}
//Safari
else if(explorer.indexOf("Safari") >= ){
alert("Safari");
}
}