在寫跨瀏覽器的js程式中,偵測瀏覽器是一個很重要的工作。我們不時要為不同的瀏覽器寫分支程式碼。
如下是一種:
代碼如下:
//新增事件工具函數
function addEvent(el,type,handle){
if(el.addEventListener){//for standard browses
}else if(el.attachEvent){//for IE
el.attachEvent("on" event,handle); =handle;
}
}
1,第一種偵測瀏覽器方式稱為 user-agent 偵測方式。是最古老的,它會偵測目標瀏覽器的確切型號,包括瀏覽器的名稱和版本。其實就是一個字串,用navigator.userAgen或navigator.appName取得。如下:
function isIE()pator
function isIE()pator}
function isIE6() {
return navigator.userAgent.split(";")[1]. toLowerCase().indexOf("msie 6.0")=="-1"?false:true;
}
function isIE7(){
return navigator.userAgent.split(";")[11 ].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.Agent.indexOf(Fongent.indexOf(1C 🎜>}
2,
第二種稱為物件/特徵偵測方式,這是一種判斷瀏覽器能力的方式,也是目前流行的方式。即在使用一個物件之前檢測它是否存在。在上述的addEvent方法中就使用了這個方式。 .addEventListener是w3c dom標準方式,而IE使用自己特有attachEvent。以下列舉幾個:
a,talbe.cells只有IE/Opera支援。
b,innerText/insertAdjacentHTML除Firefox外,IE6/7/8/Safari/Chrome/Opera都支援。
c,window.external.AddFavorite用來在IE下方加入到收藏夾。
d,window.sidebar.addPanel用來在FF下方加入到收藏夾。
3,第三種很有趣,暫且稱為 瀏覽器缺陷或bug 方式,即某些表現不是瀏覽器廠商刻意實現的。如下:
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,
TagName('i');
while (
div.innerHTML = '',
',
all[0]
); return v > 4 ? v : undef}());
史上最も創造的な IE 判決として知られています。
注 1: isIE = "v" == "v" メソッド IE9 ではバグが修正されており、このメソッドを使用して IE ブラウザを判断することはできません (2010-6 に IE9 pre3 でテスト済み) -29)