如何使用JavaScript查找操作系统版本?

vip*_*yar 188 javascript user-agent operating-system

如何使用JavaScript查找操作系统名称和操作系统版本?

Lud*_*wig 191

我开始编写一个脚本来阅读可以在Fiddle上测试的操作系统和浏览器版本.随意使用和扩展.

/**
 * JavaScript Client Detection
 * (C) viazenetti GmbH (Christian Ludwig)
 */
(function (window) {
    {
        var unknown = '-';

        // screen
        var screenSize = '';
        if (screen.width) {
            width = (screen.width) ? screen.width : '';
            height = (screen.height) ? screen.height : '';
            screenSize += '' + width + " x " + height;
        }

        // browser
        var nVer = navigator.appVersion;
        var nAgt = navigator.userAgent;
        var browser = navigator.appName;
        var version = '' + parseFloat(navigator.appVersion);
        var majorVersion = parseInt(navigator.appVersion, 10);
        var nameOffset, verOffset, ix;

        // Opera
        if ((verOffset = nAgt.indexOf('Opera')) != -1) {
            browser = 'Opera';
            version = nAgt.substring(verOffset + 6);
            if ((verOffset = nAgt.indexOf('Version')) != -1) {
                version = nAgt.substring(verOffset + 8);
            }
        }
        // Opera Next
        if ((verOffset = nAgt.indexOf('OPR')) != -1) {
            browser = 'Opera';
            version = nAgt.substring(verOffset + 4);
        }
        // Edge
        else if ((verOffset = nAgt.indexOf('Edge')) != -1) {
            browser = 'Microsoft Edge';
            version = nAgt.substring(verOffset + 5);
        }
        // MSIE
        else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
            browser = 'Microsoft Internet Explorer';
            version = nAgt.substring(verOffset + 5);
        }
        // Chrome
        else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
            browser = 'Chrome';
            version = nAgt.substring(verOffset + 7);
        }
        // Safari
        else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
            browser = 'Safari';
            version = nAgt.substring(verOffset + 7);
            if ((verOffset = nAgt.indexOf('Version')) != -1) {
                version = nAgt.substring(verOffset + 8);
            }
        }
        // Firefox
        else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
            browser = 'Firefox';
            version = nAgt.substring(verOffset + 8);
        }
        // MSIE 11+
        else if (nAgt.indexOf('Trident/') != -1) {
            browser = 'Microsoft Internet Explorer';
            version = nAgt.substring(nAgt.indexOf('rv:') + 3);
        }
        // Other browsers
        else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
            browser = nAgt.substring(nameOffset, verOffset);
            version = nAgt.substring(verOffset + 1);
            if (browser.toLowerCase() == browser.toUpperCase()) {
                browser = navigator.appName;
            }
        }
        // trim the version string
        if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
        if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
        if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);

        majorVersion = parseInt('' + version, 10);
        if (isNaN(majorVersion)) {
            version = '' + parseFloat(navigator.appVersion);
            majorVersion = parseInt(navigator.appVersion, 10);
        }

        // mobile version
        var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);

        // cookie
        var cookieEnabled = (navigator.cookieEnabled) ? true : false;

        if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
            document.cookie = 'testcookie';
            cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
        }

        // system
        var os = unknown;
        var clientStrings = [
            {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
            {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
            {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
            {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
            {s:'Windows Vista', r:/Windows NT 6.0/},
            {s:'Windows Server 2003', r:/Windows NT 5.2/},
            {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
            {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
            {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
            {s:'Windows 98', r:/(Windows 98|Win98)/},
            {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
            {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
            {s:'Windows CE', r:/Windows CE/},
            {s:'Windows 3.11', r:/Win16/},
            {s:'Android', r:/Android/},
            {s:'Open BSD', r:/OpenBSD/},
            {s:'Sun OS', r:/SunOS/},
            {s:'Chrome OS', r:/CrOS/},
            {s:'Linux', r:/(Linux|X11(?!.*CrOS))/},
            {s:'iOS', r:/(iPhone|iPad|iPod)/},
            {s:'Mac OS X', r:/Mac OS X/},
            {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
            {s:'QNX', r:/QNX/},
            {s:'UNIX', r:/UNIX/},
            {s:'BeOS', r:/BeOS/},
            {s:'OS/2', r:/OS\/2/},
            {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}
        ];
        for (var id in clientStrings) {
            var cs = clientStrings[id];
            if (cs.r.test(nAgt)) {
                os = cs.s;
                break;
            }
        }

        var osVersion = unknown;

        if (/Windows/.test(os)) {
            osVersion = /Windows (.*)/.exec(os)[1];
            os = 'Windows';
        }

        switch (os) {
            case 'Mac OS X':
                osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
                break;

            case 'Android':
                osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
                break;

            case 'iOS':
                osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
                osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
                break;
        }

        // flash (you'll need to include swfobject)
        /* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */
        var flashVersion = 'no check';
        if (typeof swfobject != 'undefined') {
            var fv = swfobject.getFlashPlayerVersion();
            if (fv.major > 0) {
                flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release;
            }
            else  {
                flashVersion = unknown;
            }
        }
    }

    window.jscd = {
        screen: screenSize,
        browser: browser,
        browserVersion: version,
        browserMajorVersion: majorVersion,
        mobile: mobile,
        os: os,
        osVersion: osVersion,
        cookies: cookieEnabled,
        flashVersion: flashVersion
    };
}(this));

alert(
    'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
    'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
      ' (' + jscd.browserVersion + ')\n' + 
    'Mobile: ' + jscd.mobile + '\n' +
    'Flash: ' + jscd.flashVersion + '\n' +
    'Cookies: ' + jscd.cookies + '\n' +
    'Screen Size: ' + jscd.screen + '\n\n' +
    'Full User Agent: ' + navigator.userAgent
);
Run Code Online (Sandbox Code Playgroud)

  • 我受到了@Ludwig代码的启发,并在GitHub上创建了一个开源项目.https://github.com/keithws/browser-report (14认同)
  • @akapelko不幸的是,Microsoft为多个操作系统使用相同的版本号(请参阅https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724832(v=vs.85).aspx) (2认同)
  • 添加了对'Edge'的检测 (2认同)
  • @skwidbreth 谢谢。添加了 Crome 操作系统并包含强化的 Linux 检测(以防有人更改顺序) (2认同)
  • 关于“osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];”行中的数字“10”:[下一个 macOS 版本](https:// en.wikipedia.org/wiki/MacOS_Big_Sur) 是“11”。所以应该更新代码。 (2认同)

kai*_*sun 161

如果列出所有window.navigator的属性使用

console.log(navigator);
Run Code Online (Sandbox Code Playgroud)

你会看到这样的东西

# platform = Win32
# appCodeName = Mozilla
# appName = Netscape
# appVersion = 5.0 (Windows; en-US)
# language = en-US
# mimeTypes = [object MimeTypeArray]
# oscpu = Windows NT 5.1
# vendor = Firefox
# vendorSub = 1.0.7
# product = Gecko
# productSub = 20050915
# plugins = [object PluginArray]
# securityPolicy =
# userAgent = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
# cookieEnabled = true
# javaEnabled = function javaEnabled() { [native code] }
# taintEnabled = function taintEnabled() { [native code] }
# preference = function preference() { [native code] }
Run Code Online (Sandbox Code Playgroud)

请注意,该oscpu属性为您提供Windows版本.另外,你应该知道:

'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Server 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 6.1)',
'Windows 8' => '(Windows NT 6.2)|(WOW64)',
'Windows 10' => '(Windows 10.0)|(Windows NT 10.0)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Open BSD' => 'OpenBSD',
'Sun OS' => 'SunOS',
'Linux' => '(Linux)|(X11)',
'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
'QNX' => 'QNX',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2',
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
Run Code Online (Sandbox Code Playgroud)

  • window.navigator.oscpu在chrome中未定义 (88认同)
  • 当我在Windows 7上的4个主流浏览器上测试时,oscpu对我的工作不一致.@ Ludwig的解决方案始终如一. (9认同)
  • window.navigator.platform已经在Chrome中获得了操作系统. (5认同)

小智 68

var OSName = "Unknown";
if (window.navigator.userAgent.indexOf("Windows NT 10.0")!= -1) OSName="Windows 10";
if (window.navigator.userAgent.indexOf("Windows NT 6.2") != -1) OSName="Windows 8";
if (window.navigator.userAgent.indexOf("Windows NT 6.1") != -1) OSName="Windows 7";
if (window.navigator.userAgent.indexOf("Windows NT 6.0") != -1) OSName="Windows Vista";
if (window.navigator.userAgent.indexOf("Windows NT 5.1") != -1) OSName="Windows XP";
if (window.navigator.userAgent.indexOf("Windows NT 5.0") != -1) OSName="Windows 2000";
if (window.navigator.userAgent.indexOf("Mac")            != -1) OSName="Mac/iOS";
if (window.navigator.userAgent.indexOf("X11")            != -1) OSName="UNIX";
if (window.navigator.userAgent.indexOf("Linux")          != -1) OSName="Linux";
Run Code Online (Sandbox Code Playgroud)

  • 您不应该在第二次检查中使用“else if”吗? (5认同)
  • @Jeff 一些过早优化的东西:) (2认同)
  • 非常简单,干脆的答案..所有我需要的。其他答案太个性化了。 (2认同)
  • @transang这些不是一个“if”语句,它们是多个单行“if”语句。它从上到下检查每一项。 (2认同)

Ian*_*ito 13

@Ludwig的解决方案很棒.一些修复(与操作系统没有关系,我不能将其作为对原始帖子的评论,因为这太长了):

  1. IE 11不再将自己标识为MS IE.
  2. IOS上的Chrome会将自己伪装成Safari

他们来了:

(function (window) {
    {
    /* test cases
        alert(
            'browserInfo result: OS: ' + browserInfo.os +' '+ browserInfo.osVersion + '\n'+
                'Browser: ' + browserInfo.browser +' '+ browserInfo.browserVersion + '\n' +
                'Mobile: ' + browserInfo.mobile + '\n' +
                'Cookies: ' + browserInfo.cookies + '\n' +
                'Screen Size: ' + browserInfo.screen
        );
    */
        var unknown = 'Unknown';

        // screen
        var screenSize = '';
        if (screen.width) {
            width = (screen.width) ? screen.width : '';
            height = (screen.height) ? screen.height : '';
            screenSize += '' + width + " x " + height;
        }

        //browser
        var nVer = navigator.appVersion;
        var nAgt = navigator.userAgent;
        var browser = navigator.appName;
        var version = '' + parseFloat(navigator.appVersion);
        var majorVersion = parseInt(navigator.appVersion, 10);
        var nameOffset, verOffset, ix;

        // Opera
        if ((verOffset = nAgt.indexOf('Opera')) != -1) {
            browser = 'Opera';
            version = nAgt.substring(verOffset + 6);
            if ((verOffset = nAgt.indexOf('Version')) != -1) {
                version = nAgt.substring(verOffset + 8);
            }
        }
        // MSIE
        else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
            browser = 'Microsoft Internet Explorer';
            version = nAgt.substring(verOffset + 5);
        }

        //IE 11 no longer identifies itself as MS IE, so trap it
        //http://stackoverflow.com/questions/17907445/how-to-detect-ie11
        else if ((browser == 'Netscape') && (nAgt.indexOf('Trident/') != -1)) {

            browser = 'Microsoft Internet Explorer';
            version = nAgt.substring(verOffset + 5);
            if ((verOffset = nAgt.indexOf('rv:')) != -1) {
                version = nAgt.substring(verOffset + 3);
            }

        }

        // Chrome
        else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
            browser = 'Chrome';
            version = nAgt.substring(verOffset + 7);
        }
        // Safari
        else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
            browser = 'Safari';
            version = nAgt.substring(verOffset + 7);
            if ((verOffset = nAgt.indexOf('Version')) != -1) {
                version = nAgt.substring(verOffset + 8);
            }

            // Chrome on iPad identifies itself as Safari. Actual results do not match what Google claims
            //  at: https://developers.google.com/chrome/mobile/docs/user-agent?hl=ja
            //  No mention of chrome in the user agent string. However it does mention CriOS, which presumably
            //  can be keyed on to detect it.
            if (nAgt.indexOf('CriOS') != -1) {
                //Chrome on iPad spoofing Safari...correct it.
                browser = 'Chrome';
                //Don't believe there is a way to grab the accurate version number, so leaving that for now.
            }
        }
        // Firefox
        else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
            browser = 'Firefox';
            version = nAgt.substring(verOffset + 8);
        }
        // Other browsers
        else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
            browser = nAgt.substring(nameOffset, verOffset);
            version = nAgt.substring(verOffset + 1);
            if (browser.toLowerCase() == browser.toUpperCase()) {
                browser = navigator.appName;
            }
        }
        // trim the version string
        if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
        if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
        if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);

        majorVersion = parseInt('' + version, 10);
        if (isNaN(majorVersion)) {
            version = '' + parseFloat(navigator.appVersion);
            majorVersion = parseInt(navigator.appVersion, 10);
        }

        // mobile version
        var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);

        // cookie
        var cookieEnabled = (navigator.cookieEnabled) ? true : false;

        if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
            document.cookie = 'testcookie';
            cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
        }

        // system
        var os = unknown;
        var clientStrings = [
            {s:'Windows 3.11', r:/Win16/},
            {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
            {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
            {s:'Windows 98', r:/(Windows 98|Win98)/},
            {s:'Windows CE', r:/Windows CE/},
            {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
            {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
            {s:'Windows Server 2003', r:/Windows NT 5.2/},
            {s:'Windows Vista', r:/Windows NT 6.0/},
            {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
            {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
            {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
            {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
            {s:'Windows ME', r:/Windows ME/},
            {s:'Android', r:/Android/},
            {s:'Open BSD', r:/OpenBSD/},
            {s:'Sun OS', r:/SunOS/},
            {s:'Linux', r:/(Linux|X11)/},
            {s:'iOS', r:/(iPhone|iPad|iPod)/},
            {s:'Mac OS X', r:/Mac OS X/},
            {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
            {s:'QNX', r:/QNX/},
            {s:'UNIX', r:/UNIX/},
            {s:'BeOS', r:/BeOS/},
            {s:'OS/2', r:/OS\/2/},
            {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}
        ];
        for (var id in clientStrings) {
            var cs = clientStrings[id];
            if (cs.r.test(nAgt)) {
                os = cs.s;
                break;
            }
        }

        var osVersion = unknown;

        if (/Windows/.test(os)) {
            osVersion = /Windows (.*)/.exec(os)[1];
            os = 'Windows';
        }

        switch (os) {
            case 'Mac OS X':
                osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
                break;

            case 'Android':
                osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
                break;

            case 'iOS':
                osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
                osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
                break;

        }
    }

    window.browserInfo = {
        screen: screenSize,
        browser: browser,
        browserVersion: version,
        mobile: mobile,
        os: os,
        osVersion: osVersion,
        cookies: cookieEnabled
    };
}(this));
Run Code Online (Sandbox Code Playgroud)


cat*_*lan 9

platform.js似乎是一个很好的文件库来做到这一点.

用法示例:

// on IE10 x86 platform preview running in IE7 compatibility mode on Windows 7 64 bit edition
platform.name; // 'IE'
platform.version; // '10.0'
platform.layout; // 'Trident'
platform.os; // 'Windows Server 2008 R2 / 7 x64'
platform.description; // 'IE 10.0 x86 (platform preview; running in IE 7 mode) on Windows Server 2008 R2 / 7 x64'

// or on an iPad
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'
platform.os; // 'iOS 5.0'
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'

// or parsing a given UA string
var info = platform.parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7.2; en; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.52');
info.name; // 'Opera'
info.version; // '11.52'
info.layout; // 'Presto'
info.os; // 'Mac OS X 10.7.2'
info.description; // 'Opera 11.52 (identifying as Firefox 4.0) on Mac OS X 10.7.2'
Run Code Online (Sandbox Code Playgroud)


Erw*_*wan 9

正如前面的答案中提到的, navigator.platform 已被弃用。我们应该使用 navigator.userAgentData 但它仍然缺乏支持(firefox、safari 在 2022 年不支持它)。

\n

请注意,navigator.userAgentData 仅适用于通过 https 的兼容浏览器。

\n

这是一个使用 UserAgentData 的脚本,并回退到旧的执行方式。

\n
function get_platform() {\n    // 2022 way of detecting. Note : this userAgentData feature is available only in secure contexts (HTTPS)\n    if (typeof navigator.userAgentData !== 'undefined' && navigator.userAgentData != null) {\n        return navigator.userAgentData.platform;\n    }\n    // Deprecated but still works for most of the browser\n    if (typeof navigator.platform !== 'undefined') {\n        if (typeof navigator.userAgent !== 'undefined' && /android/.test(navigator.userAgent.toLowerCase())) {\n            // android device\xe2\x80\x99s navigator.platform is often set as 'linux', so let\xe2\x80\x99s use userAgent for them\n            return 'android';\n        }\n        return navigator.platform;\n    }\n    return 'unknown';\n}\n\nlet platform = get_platform();\n\n// examples of use\nlet isOSX = /mac/.test(platform.toLowerCase()); // Mac desktop\nlet isIOS = ['iphone', 'ipad', 'ipod'].indexOf(platform.toLowerCase()) !== -1; // Mac iOs\nlet isApple = isOSX || isIOS; // Apple device (desktop or iOS)\nlet isWindows = /win/.test(platform.toLowerCase()); // Windows\nlet isAndroid = /android/.test(platform.toLowerCase()); // Android\nlet isLinux = /linux/.test(platform.toLowerCase()); // Linux\n
Run Code Online (Sandbox Code Playgroud)\n


Dav*_*ing 8

JavaScript可以访问window.navigator.platform- 表示浏览器平台的字符串:https://developer.mozilla.org/en/DOM/window.navigator.platform

用它来提取你需要的任何细节(也可以).请注意,无法保证客户端实际使用该平台,因为这可以通过多种方式轻松修改.

  • "此功能已从Web标准中删除.虽然某些浏览器可能仍然支持它,但它正在被删除.不要在旧项目或新项目中使用它.使用它的页面或Web应用程序可能随时中断. " (4认同)
  • 更新:我修复了葡萄牙语文档,并验证了英语文档确实在某些时候得到了纠正。 (4认同)
  • @ConAntonakos 你能为该声明提供参考吗?这个答案的 MDN 链接中没有提到这一点。 (2认同)
  • @Splaktar - 这太奇怪了.那个消息绝对存在,但我发现它已经不存在了.我认为在2016年的某个时候它被考虑过了?我也看到了这个问题(/sf/ask/2695456221/),所以其他人也注意到了这个问题.感谢更新. (2认同)
  • 我认为文档很混乱,它仍然说它在葡萄牙语版本中已被弃用:https://developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform (2认同)

Jan*_*uka 7

您可以使用此javascript功能简单地检查用户的操作系统

  function getOS() {
  var userAgent = window.navigator.userAgent,
      platform = window.navigator.platform,
      macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
      windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
      iosPlatforms = ['iPhone', 'iPad', 'iPod'],
      os = null;

  if (macosPlatforms.indexOf(platform) !== -1) {
    os = 'Mac OS';
  } else if (iosPlatforms.indexOf(platform) !== -1) {
    os = 'iOS';
  } else if (windowsPlatforms.indexOf(platform) !== -1) {
    os = 'Windows';
  } else if (/Android/.test(userAgent)) {
    os = 'Android';
  } else if (!os && /Linux/.test(platform)) {
    os = 'Linux';
  }

  return os;
}

alert(getOS());
Run Code Online (Sandbox Code Playgroud)

  • navigator.platform 在打字稿中已弃用 (3认同)

Kei*_*haw 5

您可以在navigator对象中找到操作系统名称和版本,正如其他人所回答的那样。查找此信息的标准、跨浏览器位置位于navigator.userAgent属性中。但是,用户代理字符串因操作系统和浏览器而异。

所以,我创建了一个脚本来封装这个逻辑,并以熟悉的方式报告最常见的操作系统和浏览器,比如http://www.whatsmybrowser.org

我将脚本开源并上传到 github,https://github.com/keithws/browser-report。欢迎拉取请求!


Vad*_*zar 5

使用DetectOS.js。这是一个简单的 JS 定义,适用于流行的操作系统和浏览器,没有依赖关系:

\n

\r\n
\r\n
class DetectOS {\n    constructor() {\n        this.browser = this.searchString(this.dataBrowser())\n        this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion)\n        this.OS = this.searchString(this.dataOS())\n    }\n\n    searchString(data) {\n        for (let i = 0; i < data.length; i++) {\n            let\n                dataString = data[i].string,\n                dataProp = data[i].prop\n            this.versionSearchString = data[i].versionSearch || data[i].identity\n            if (dataString) {\n                if (dataString.indexOf(data[i].subString) !== -1) {\n                    return data[i].identity\n                }\n            } else if (dataProp) {\n                return data[i].identity\n            }\n        }\n    }\n\n    searchVersion(dataString) {\n        let index = dataString.indexOf(this.versionSearchString)\n        if (index === -1) return\n        return parseFloat(dataString.substring(index+this.versionSearchString.length + 1))\n    }\n\n    dataBrowser() {\n        return [\n            /***************\n             * Chrome\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Chrome",\n                identity: "Chrome"\n            },\n            /***************\n             * Safari\n             ***************/\n            {\n                string: navigator.vendor,\n                subString: "Apple",\n                identity: "Safari",\n                versionSearch: "Version"\n            },\n            /***************\n             * For Older Opera (12.18-)\n             ***************/\n            {\n                prop: window.opera,\n                identity: "Opera",\n                versionSearch: "Version"\n            },\n            /***************\n             * Internet Explorer 10\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "MSIE",\n                identity: "IE10",\n                versionSearch: "MSIE"\n            },\n            /***************\n             * Internet Explorer 11\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Trident",\n                identity: "IE11",\n                versionSearch: "rv"\n            },\n            /***************\n             * Edge\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Edge",\n                identity: "Edge",\n                versionSearch: "Edge"\n            },\n            /***************\n             * Firefox\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Firefox",\n                identity: "Firefox"\n            },\n            {\n                string: navigator.userAgent,\n                subString: "Gecko",\n                identity: "Mozilla",\n                versionSearch: "rv"\n            },\n            /***************\n             * For Older Netscapes (4-)\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Mozilla",\n                identity: "Netscape",\n                versionSearch: "Mozilla"\n            },\n            /***************\n             * For Newer Netscapes (6+)\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "Netscape",\n                identity: "Netscape"\n            },\n            /***************\n             * Other Browsers\n             ***************/\n            {\n                string: navigator.userAgent,\n                subString: "OmniWeb",\n                versionSearch: "OmniWeb/",\n                identity: "OmniWeb"\n            },\n            {\n                string: navigator.vendor,\n                subString: "iCab",\n                identity: "iCab"\n            },\n            {\n                string: navigator.vendor,\n                subString: "KDE",\n                identity: "Konqueror"\n            },\n            {\n                string: navigator.vendor,\n                subString: "Camino",\n                identity: "Camino"\n            }\n        ]\n    }\n\n    dataOS() {\n        return [\n            {\n                string: navigator.platform,\n                subString: \'Win\',\n                identity: \'Windows\'\n            },\n            {\n                string: navigator.platform,\n                subString: \'Mac\',\n                identity: \'macOS\'\n            },\n            {\n                string: navigator.userAgent,\n                subString: \'iPhone\',\n                identity: \'iOS\'\n            },\n            {\n                string: navigator.userAgent,\n                subString: \'iPad\',\n                identity: \'iOS\'\n            },\n            {\n                string: navigator.userAgent,\n                subString: \'iPod\',\n                identity: \'iOS\'\n            },\n            {\n                string: navigator.userAgent,\n                subString: \'Android\',\n                identity: \'Android\'\n            },\n            {\n                string: navigator.platform,\n                subString: \'Linux\',\n                identity: \'Linux\'\n            }\n        ]\n    }\n}\n\nconst Detect = new DetectOS()\n\nconsole.log("We know your browser \xe2\x80\x93 it\'s " + Detect.browser + " " + Detect.version);\nconsole.log("We know your OS \xe2\x80\x93 it\'s " + Detect.OS);\nconsole.log("We know everything about you.");
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n