[英]Determine OS using javascript
我正在 Javascript 中尋找獲取客戶端操作系統的通用方法。 許多記錄在案的解決方案使用用戶代理,我在堆棧溢出方面遇到過類似的問題/答案,這些問題/答案已經過時。 下面提供了一個示例函數,但我想知道是否有更全面的版本符合以下准則:
下面的示例沒有經過太多思考就放在一起,我正在尋找更好的版本
function getOS() {
var osStr;
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("windows xp") !== -1) {
osStr = "WindowsXP";
} else if (ua.indexOf("windows nt 6.1") !== -1) {
osStr = "Windows7";
} else if (ua.indexOf("windows nt 10.0") !== -1) {
osStr = "Windows10";
} else if (ua.indexOf("iemobile") !== -1 || ua.indexOf("windows phone") !== -1) {
osStr = "WindowsMobile";
} else if (ua.indexOf("windows") !== -1) {
osStr = "Windows";
} else if (ua.indexOf("ipad") !== -1) {
osStr = "ipad";
} else if (ua.indexOf("ipod") !== -1) {
osStr = "iTouch)";
} else if (ua.indexOf("iphone") !== -1) {
osStr = "iPhone)";
} else if (ua.indexOf("cros") !== -1) {
osStr = "ChromeOS";
} else if (ua.indexOf("android") !== -1) {
osStr = "Android";
} else if (ua.indexOf("blackberry") !== -1) {
osStr = "Blackberry";
} else if (ua.indexOf("palm") !== -1) {
osStr = "PalmOS";
} else if (ua.indexOf("kindle") !== -1) {
osStr = "Kindle";
} else if (ua.indexOf("ubuntu") !== -1) {
osStr = "Ubuntu";
} else if (ua.indexOf("linux") !== -1) {
osStr = "Linux";
} else if (ua.indexOf("nix") !== -1) {
osStr = "UNIX";
} else {
osStr = "Unknown";
}
return osStr;
}
有很多不同的用戶代理字符串,請參見http://www.user-agents.org/
將它們全部篩選出來是不切實際的。 根據您的用例,過濾掉您關心的那些會更有益。
但是,您可以使用一些 API,它們已經為您完成了艱苦的工作https://developers.whatismybrowser.com/api/features/user-agent-parse是一個很棒的工具,可以為您解析用戶代理字符串
這是一個更全面的列表,其中包含每個https://www.whatsmyua.info/ 的示例
正在尋求將操作系統與用戶代理組合成一個字符串,並且https://github.com/faisalman/ua-parser-js 上的 UAParser 庫(通過上面的答案找到)對兩者都適用。 該庫目前是最新的,看起來維護得很好。 它的縮小版本是 19KB。 創建了一個函數
function getPlatform() {
var uap = UAParser(navigator.userAgent);
var osVersion = uap.os.version;
if (osVersion == null) {
osVersion = "";
}
var browserVersion = uap.browser.major;
if (browserVersion == null) {
browserVersion = "";
}
var platform = uap.os.name + osVersion + "_" + uap.browser.name + browserVersion;
platform = platform.replace(/\s/g, '');
return platform;
}
它在調用時返回一個沒有空格的字符串OS_UA ,它作為 URL 的一部分從客戶端轉發到服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.