最も簡単なブラウザ検出JavaScriptコード

12839 ワード

ブラウザをまたぐjsプログラムを書く中で、ブラウザを検出するのはとても重要な仕事です.私たちは時々異なるブラウザのために分岐コードを書きます.次の通りです
//        
function addEvent(el,type,handle){
if(el.addEventListener){//for standard browses
el.addEventListener(type,handle,false);
}
else if(el.attachEvent){//for IE
el.attachEvent("on"+event,handle);
}
else{//other
el["on"+type]=handle;
}
}
 
1   第一の検出ブラウザ方式を「ブラウザ」と呼びます. user-agent 検出モード.最も古いのです.ターゲットブラウザの正確な型番を検出して、ブラウザの名前とバージョンを含みます.つまり文字列です.navigator.userAgenまたはnavigator.appNameで取得します.以下のとおりです
function isIE(){
return navigator.appName.indexOf("Microsoft Internet Explorer")!=-1 && document.all;
}
function isIE6() {
return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 6.0")=="-1"?false:true;
}
function isIE7(){
return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 7.0")=="-1"?false:true;
}
function isIE8(){
return navigator.userAgent.split(";")[1].toLowerCase().indexOf("msie 8.0")=="-1"?false:true;
}
function isNN(){
return navigator.userAgent.indexOf("Netscape")!=-1;
}
function isOpera(){
return navigator.appName.indexOf("Opera")!=-1;
}
function isFF(){
return navigator.userAgent.indexOf("Firefox")!=-1;
}
function isChrome(){
return navigator.userAgent.indexOf("Chrome") > -1;
}
2  二つ目は オブジェクト/特徴 これはブラウザの能力を判断する方法であり、現在流行している方法でもある.オブジェクトを使用する前に、存在するかどうかを検出します.上記のaddEvent方法ではこの方式が使われています.addEvent Listenerはw 3 c dom標準方式で、IEは自分特有のatachEventを使う.以下にいくつか挙げます.
a,talbe.cellsはIE/Operaのみサポートしています.
b、innerText/insertAdjacentHTMLはFirefoxを除いて、IE 6/7/8/Safari/Chrome/Operaはすべて支持します.
c,window.external.Add FavoriteはIEの下でお気に入りに追加するために使用されます.
d,window.sidebar.addPanelはFFの下でお気に入りに追加するために使用されます.
3 三つ目は面白いです. ブラウザ欠陥またはバグ いくつかの表現はブラウザメーカーが意図的に実現したものではない.以下のとおりです
var isIE = !+"\v1";
var isIE = !-[1,];
var isIE = "\v"=="v";
isSafari
=/a/.__proto__=='//';
isOpera
=!!window.opera;
最も古典的なものは !-[1,] の判定方式は、現在最小コード判定IEの方式は6 byteである.これはロシア人です 発見されました.配列[1,]のlengthを利用しました.イギリスから来た若い人もいます.  James Padolsey IE条件でコメント
var ie = (function(){
var undef,
v
= 3,
div
= document.createElement('div'),
all
= div.getElementsByTagName('i');

while (
div.innerHTML
= '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[
0]
);
return v > 4 ? v : undef
}());
史上最もクリエイティブといわれるIE判断. 
 
注1:isIE="v"=="v"方式IE 9はこのバグを修復しました.このようにIEブラウザを判断することはできませんでした.