最も簡単なブラウザ検出JavaScriptコード
12839 ワード
ブラウザをまたぐjsプログラムを書く中で、ブラウザを検出するのはとても重要な仕事です.私たちは時々異なるブラウザのために分岐コードを書きます.次の通りです
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 三つ目は面白いです. ブラウザ欠陥またはバグ いくつかの表現はブラウザメーカーが意図的に実現したものではない.以下のとおりです
注1:isIE="v"=="v"方式IE 9はこのバグを修復しました.このようにIEブラウザを判断することはできませんでした.
//
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ブラウザを判断することはできませんでした.