瀏覽器版本偵測
navigator.appName 瀏覽器的正式名稱、編碼名稱,均傳回 Netscape
navigator.userAgentData
從 Chrome 101 開始,瀏覽器用戶代理字符串中可用的信息量將減少。要解決此問題,需要將 navigator.userAgent、navigator.appVersion 和 navigator.platform 的用法替換為特徵檢測、漸進增強或遷移到 navigator.userAgentData。
但目前瀏覽器支持該功能似乎尚未完整。
navigator.userAgent
瀏覽器檢測 JavaScript Browser Detection
使用 JavaScript 來判斷網頁瀏覽訪客正在使用哪種瀏覽器的技術。可以用來提供不同的網頁內容或功能,根據不同的瀏覽器的支援程度或偏好來調整細節。使用 JavaScript 用戶代理 User Agent 由瀏覽器發送給伺服器的字串資訊,用來識別自己的名稱、版本、作業系統等資訊。可以使用 navigator.userAgent 屬性來取得用戶代理字串,並使用字串方法或正則表達式來檢查其中是否包含某個瀏覽器的名稱。
var browserVersion = function () {
var UA = navigator.userAgent;
var tMatch;
var M = UA.match(/(OPERA|CHROME|SAFARI|FIREFOX|MSIE|TRIDENT(?=\/))\/?\s*(\d+)/i) || [];
if (/TRIDENT/i.test(M[1])) {
tMatch = /\brv[ :]+(\d+)/g.exec(UA) || [];
return "IE " + (tMatch[1] || "");
}
if (M[1] === "Chrome") {
tMatch = UA.match(/\b(OPR|Edg)\/(\d+)/);
if (tMatch != null) {
return tMatch.slice(1).join(" ").replace("OPR", "Opera").replace("Edg", "Edge");
}
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, "-?"];
if ((tMatch = UA.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tMatch[1]);
return M.join(" ");
};
var browserName = browserVersion();
console.log(browserName);
簡易版本
var browserName = function () {
const a = navigator.userAgent.toUpperCase();
var bName;
if (a.indexOf("TRIDENT") != -1) {
bName = "IE 11"
} else if (a.indexOf("MSIE") != -1) {
bName = "MSIE"
} else if (a.indexOf("EDG/") != -1) {
bName = "Edge"
} else if (a.indexOf("OPR/") != -1) {
bName = "OPERA"
} else if (a.indexOf("CHROME") != -1) {
bName = "Chrome"
} else if (a.indexOf("FIREFOX") != -1) {
bName = "Firefox"
} else if (a.indexOf("SAFARI") != -1) {
bName = "Safari"
} else {
bName = "NO !";
}
return bName;
}
navigator window 的特徵
navigator.appCodeName IE, Firefox, Safari, Chrome 均傳回 Mozilla
navigator.appName IE10 以下傳回 IE11 傳回 Netscape.
Chrome, Firefox, Safari, Opera 均傳回 Netscape
navigator.appVersion 傳回格式不太一樣
navigator.platform 傳回 Win32;IE 64-bit 傳回 Win64
navigator.cookieEnabled 傳回瀏覽器的 cookie 是否啟動(布林值) true/false
Internet Explorer 11 修改了瀏覽器的 user agent 原來的識別碼「MSIE」不見了
例如以 Windows 10 的 IE11 顯示
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0;... rv:11.0) like Gecko
以 rv 來判斷 IE11的版本。
var rv;
var ua = navigator.userAgent;
if (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(ua) != null) {
rv = parseFloat(RegExp.$1);
} else {
rv = -1;
}