js判斷是否在微信或QQ中

NO IMAGE

之前用網上現成的程式碼發現有很多瀏覽器被判別成QQ,像這樣:

function is_weixn_qq(){
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
return "weixin";
} else if (ua.match(/QQ/i) == "qq") {
return "QQ";
}
return false;
}  

原因是一些手機瀏覽器navigator資訊中會包含qqbrowser字元,因此被錯判為QQ環境,通過分析不同環境下的navigator資訊,微信和QQ環境下會包含如下的特徵字串:

MicroMessenger/xxx
qq/xxx
(xxx)疑似是版本號?

我們將原來程式碼中的正規表示式改為下面這樣就行了:

if(ua.match(/MicroMessenger\/[0-9]/i)){
return "weixin";
}
if(ua.match(/QQ\/[0-9]/i)){
return "QQ";
}

擴充套件:為什麼瀏覽器navigator中會出現其他瀏覽器的標識呢?
原因是以前不同的瀏覽器對特性的支援情況不同,因此在程式編寫的時候開發人員會通過判斷瀏覽器的型別,來決定網頁要不要顯示相關特性。而隨著瀏覽器的發展,瀏覽器支援的特性越來越全,因此,為了告訴以前的網頁“我是支援這些特性的”,瀏覽器開發者會在navigator欄位新增其他瀏覽器的標籤,從而避過頁面開發人員的檢測。有點像兩邊不斷防禦,不斷破解的感覺,導致現在網上一些老的程式碼沒法用,只能根據當前的實際情況自己編寫程式碼。