How to find the operating system version using JavaScript?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







170















How can I find the OS name and OS version using JavaScript?










share|improve this question































    170















    How can I find the OS name and OS version using JavaScript?










    share|improve this question



























      170












      170








      170


      82






      How can I find the OS name and OS version using JavaScript?










      share|improve this question
















      How can I find the OS name and OS version using JavaScript?







      javascript operating-system user-agent






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Sep 18 '18 at 23:25









      Sebastian Simon

      10.6k63251




      10.6k63251










      asked Mar 1 '12 at 10:05









      vipin katiyarvipin katiyar

      1,20261729




      1,20261729
























          13 Answers
          13






          active

          oldest

          votes


















          144














          If you list all of window.navigator's properties using



          console.log(navigator);


          You'll see something like this



          # 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] }


          Note that oscpu attribute gives you the Windows version. Also, you should know that:



          '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)'





          share|improve this answer


























          • Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

            – kaissun
            Apr 1 '13 at 15:09






          • 7





            oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

            – Ian Ippolito
            Jan 24 '14 at 21:04











          • according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

            – Juan Carlos Alpizar Chinchilla
            May 6 '14 at 2:30






          • 80





            window.navigator.oscpu is undefined in chrome

            – Curtis
            Sep 2 '14 at 21:11






          • 5





            window.navigator.platform has got the OS in Chrome.

            – Ketha Kavya
            Sep 19 '16 at 5:55



















          182














          I started to write a Script to read OS and browser version that can be tested on Fiddle. Feel free to use and extend.



          /**
          * 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:'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;
          }

          // 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 + 'nn' +
          'Full User Agent: ' + navigator.userAgent
          );





          share|improve this answer


























          • This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

            – xxstevenxo
            Oct 13 '13 at 15:53






          • 1





            Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

            – Eadel
            Oct 29 '14 at 8:35








          • 1





            @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

            – Ludwig
            Jun 3 '15 at 8:23








          • 12





            I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

            – Keith Shaw
            Sep 11 '15 at 18:31






          • 2





            Added a detection for 'Edge'

            – Ludwig
            Oct 14 '16 at 12:51



















          58














          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";





          share|improve this answer


























          • This is an excellent answer :)

            – www139
            Dec 26 '15 at 12:02






          • 38





            I like the word else...

            – Jeff
            Oct 28 '16 at 14:52






          • 3





            What about iOS and Android and ...

            – Bennett McElwee
            Aug 21 '17 at 22:02






          • 1





            @Jeff something something premature optimisation :)

            – RozzA
            Jan 29 '18 at 2:33













          • very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

            – eaglei22
            Aug 30 '18 at 15:02



















          11














          @Ludwig 's solution was brilliant. A couple of fixes (which didn't have to do with operating system, and I couldn't place as a comment on his original posting because this is too long):




          1. IE 11 no longer identifies itself as MS IE.

          2. Chrome on IOS spoofs itself as Safari


          Here they are:



          (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));





          share|improve this answer


























          • I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

            – Todd Horst
            Mar 12 '14 at 14:40











          • So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

            – RobG
            Oct 20 '15 at 22:26











          • @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

            – Vijay
            Nov 29 '17 at 13:06



















          8














          JavaScript have access to the window.navigator.platform - a string representing the platform of the browser: https://developer.mozilla.org/en/DOM/window.navigator.platform



          Use it to extract whatever details you need (and can). Note that there are no guarantees that the client actually uses that platform since this can easily be modified in many ways.






          share|improve this answer



















          • 4





            "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

            – Con Antonakos
            Mar 8 '16 at 4:10






          • 1





            @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

            – Splaktar
            Sep 24 '17 at 6:16






          • 2





            @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

            – Con Antonakos
            Sep 25 '17 at 17:19













          • I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

            – Gark Garcia
            Jan 21 at 11:34











          • UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

            – Gark Garcia
            Jan 21 at 12:41



















          6














          platform.js seems like a good one file library to do this.



          Usage example:



          // 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'





          share|improve this answer































            3














            You can find the OS name and version in the navigator object, as others have answered. The standard, cross-browser place to find this information is in the navigator.userAgent property. However, user agent strings vary widely by OS and browser.



            So, I created a script to encapsulate this logic and report on the most common OSes and browsers in a familiar way, like http://www.whatsmybrowser.org.



            I open-sourced the script and uploaded it to github, https://github.com/keithws/browser-report. Pull requests are welcome!






            share|improve this answer































              2














              You can use this javascript function to check users' OS simply



                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());





              share|improve this answer































                1














                I've created a library for parsing User Agent strings called Voodoo. But be aware that this should not be used instead of feature detection.



                What Voodoo does, is that it parses the userAgent string, which is found in the Navigator object (window.navigator). It's not all browsers that passes a reliable userAgent string, so even though it's the normal way to do it, the userAgent can not always be trusted.






                share|improve this answer
























                • I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                  – lolol
                  May 10 '13 at 21:28



















                1














                Use detectOS.js:



                var Detect = {
                init: function () {
                this.OS = this.searchString(this.dataOS);
                },
                searchString: function (data) {
                for (var i=0;i<data.length;i++) {
                var dataString = data[i].string;
                var dataProp = data[i].prop;
                if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                return data[i].identity;
                }
                else if (dataProp)
                return data[i].identity;
                }
                },
                dataOS : [
                {
                string: navigator.platform,
                subString: 'Win',
                identity: 'Windows'
                },
                {
                string: navigator.platform,
                subString: 'Mac',
                identity: 'macOS'
                },
                {
                string: navigator.userAgent,
                subString: 'iPhone',
                identity: 'iOS'
                },
                {
                string: navigator.userAgent,
                subString: 'iPad',
                identity: 'iOS'
                },
                {
                string: navigator.userAgent,
                subString: 'iPod',
                identity: 'iOS'
                },
                {
                string: navigator.userAgent,
                subString: 'Android',
                identity: 'Android'
                },
                {
                string: navigator.platform,
                subString: 'Linux',
                identity: 'Linux'
                }
                ]
                };

                Detect.init();

                console.log("We know your OS – it's " + Detect.OS + ". We know everything about you.");





                share|improve this answer































                  0














                  I fork @Ludwig code and remove necessity of swfobject.



                  I just use swfobject code for detect flash version.



                  /**
                  * 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);
                  }
                  }
                  // 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:'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;
                  }

                  var flashVersion = 'no check', d, fv = ;
                  if (typeof navigator.plugins !== 'undefined' && typeof navigator.plugins["Shockwave Flash"] === "object") {
                  d = navigator.plugins["Shockwave Flash"].description;
                  if (d && !(typeof navigator.mimeTypes !== 'undefined' && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                  d = d.replace(/^.*s+(S+s+S+$)/, "$1");
                  fv[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
                  fv[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
                  fv[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                  }
                  } else if (typeof window.ActiveXObject !== 'undefined') {
                  try {
                  var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                  if (a) { // a will return null when ActiveX is disabled
                  d = a.GetVariable("$version");
                  if (d) {
                  d = d.split(" ")[1].split(",");
                  fv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                  }
                  }
                  }
                  catch(e) {}
                  }
                  if (fv.length) {
                  flashVersion = fv[0] + '.' + fv[1] + ' r' + fv[2];
                  }
                  }

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

                  alert(
                  'OS: ' + jscd.os +' '+ jscd.osVersion + 'n'+
                  'Browser: ' + jscd.browser +' '+ jscd.browserVersion + 'n' +
                  'Mobile: ' + jscd.mobile + 'n' +
                  'Flash: ' + jscd.flashVersion + 'n' +
                  'Cookies: ' + jscd.cookies + 'n' +
                  'Screen Size: ' + jscd.screen + 'nn' +
                  'Full User Agent: ' + navigator.userAgent
                  );





                  share|improve this answer































                    0














                    I can't comment on @Ian Ippolito answer (because I would have if I had the rep) but according to the document his comment linked, I'm fairly certain you can find the Chrome version for IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja lists the UA as: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1



                    So this should work:



                    if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                    //Chrome on iPad spoofing Safari...correct it.
                    browser = 'Chrome';
                    version = nAgt.substring(verOffset + 6);//should get the criOS ver.
                    }


                    Haven't been able to test (otherwise I would have improved his answer) it to make sure since my iPad is at home and I'm at work, but I thought I'd put it out there.






                    share|improve this answer































                      0














                      Hey for a quick solution you can consider the following library : UAPARSER - https://www.npmjs.com/package/ua-parser-js



                      example :



                      <script type="text/javascript" src="ua-parser.min.js"></script>
                      <script type="text/javascript">

                      var parser = new UAParser();
                      console.log(parser.getOS()) // will log {name: "", version:""}


                      you can also install the library via npm, and import it like this:



                      import { UAParser } from 'ua-parser-js';
                      let parser = new UAParser();
                      parser.getOS();


                      the library is a JS based user agent string parser (window.navigator.userAgent is the user agent on browser) , so you can get with it other details aswell such as Browser,device,engines etc..and it can work with node js as well.



                      if you need typing for the library : https://www.npmjs.com/package/@types/ua-parser-js






                      share|improve this answer
























                        Your Answer






                        StackExchange.ifUsing("editor", function () {
                        StackExchange.using("externalEditor", function () {
                        StackExchange.using("snippets", function () {
                        StackExchange.snippets.init();
                        });
                        });
                        }, "code-snippets");

                        StackExchange.ready(function() {
                        var channelOptions = {
                        tags: "".split(" "),
                        id: "1"
                        };
                        initTagRenderer("".split(" "), "".split(" "), channelOptions);

                        StackExchange.using("externalEditor", function() {
                        // Have to fire editor after snippets, if snippets enabled
                        if (StackExchange.settings.snippets.snippetsEnabled) {
                        StackExchange.using("snippets", function() {
                        createEditor();
                        });
                        }
                        else {
                        createEditor();
                        }
                        });

                        function createEditor() {
                        StackExchange.prepareEditor({
                        heartbeatType: 'answer',
                        autoActivateHeartbeat: false,
                        convertImagesToLinks: true,
                        noModals: true,
                        showLowRepImageUploadWarning: true,
                        reputationToPostImages: 10,
                        bindNavPrevention: true,
                        postfix: "",
                        imageUploader: {
                        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                        allowUrls: true
                        },
                        onDemand: true,
                        discardSelector: ".discard-answer"
                        ,immediatelyShowMarkdownHelp:true
                        });


                        }
                        });














                        draft saved

                        draft discarded


















                        StackExchange.ready(
                        function () {
                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9514179%2fhow-to-find-the-operating-system-version-using-javascript%23new-answer', 'question_page');
                        }
                        );

                        Post as a guest















                        Required, but never shown

























                        13 Answers
                        13






                        active

                        oldest

                        votes








                        13 Answers
                        13






                        active

                        oldest

                        votes









                        active

                        oldest

                        votes






                        active

                        oldest

                        votes









                        144














                        If you list all of window.navigator's properties using



                        console.log(navigator);


                        You'll see something like this



                        # 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] }


                        Note that oscpu attribute gives you the Windows version. Also, you should know that:



                        '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)'





                        share|improve this answer


























                        • Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                          – kaissun
                          Apr 1 '13 at 15:09






                        • 7





                          oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                          – Ian Ippolito
                          Jan 24 '14 at 21:04











                        • according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                          – Juan Carlos Alpizar Chinchilla
                          May 6 '14 at 2:30






                        • 80





                          window.navigator.oscpu is undefined in chrome

                          – Curtis
                          Sep 2 '14 at 21:11






                        • 5





                          window.navigator.platform has got the OS in Chrome.

                          – Ketha Kavya
                          Sep 19 '16 at 5:55
















                        144














                        If you list all of window.navigator's properties using



                        console.log(navigator);


                        You'll see something like this



                        # 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] }


                        Note that oscpu attribute gives you the Windows version. Also, you should know that:



                        '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)'





                        share|improve this answer


























                        • Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                          – kaissun
                          Apr 1 '13 at 15:09






                        • 7





                          oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                          – Ian Ippolito
                          Jan 24 '14 at 21:04











                        • according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                          – Juan Carlos Alpizar Chinchilla
                          May 6 '14 at 2:30






                        • 80





                          window.navigator.oscpu is undefined in chrome

                          – Curtis
                          Sep 2 '14 at 21:11






                        • 5





                          window.navigator.platform has got the OS in Chrome.

                          – Ketha Kavya
                          Sep 19 '16 at 5:55














                        144












                        144








                        144







                        If you list all of window.navigator's properties using



                        console.log(navigator);


                        You'll see something like this



                        # 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] }


                        Note that oscpu attribute gives you the Windows version. Also, you should know that:



                        '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)'





                        share|improve this answer















                        If you list all of window.navigator's properties using



                        console.log(navigator);


                        You'll see something like this



                        # 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] }


                        Note that oscpu attribute gives you the Windows version. Also, you should know that:



                        '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)'






                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Jun 27 '18 at 18:40









                        stckvrw

                        711527




                        711527










                        answered Mar 1 '12 at 10:25









                        kaissunkaissun

                        2,01011432




                        2,01011432













                        • Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                          – kaissun
                          Apr 1 '13 at 15:09






                        • 7





                          oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                          – Ian Ippolito
                          Jan 24 '14 at 21:04











                        • according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                          – Juan Carlos Alpizar Chinchilla
                          May 6 '14 at 2:30






                        • 80





                          window.navigator.oscpu is undefined in chrome

                          – Curtis
                          Sep 2 '14 at 21:11






                        • 5





                          window.navigator.platform has got the OS in Chrome.

                          – Ketha Kavya
                          Sep 19 '16 at 5:55



















                        • Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                          – kaissun
                          Apr 1 '13 at 15:09






                        • 7





                          oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                          – Ian Ippolito
                          Jan 24 '14 at 21:04











                        • according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                          – Juan Carlos Alpizar Chinchilla
                          May 6 '14 at 2:30






                        • 80





                          window.navigator.oscpu is undefined in chrome

                          – Curtis
                          Sep 2 '14 at 21:11






                        • 5





                          window.navigator.platform has got the OS in Chrome.

                          – Ketha Kavya
                          Sep 19 '16 at 5:55

















                        Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                        – kaissun
                        Apr 1 '13 at 15:09





                        Of course (Windows NT 6.2) See this link bitbucket.org/cat_in_136/configuration-mania/src/…

                        – kaissun
                        Apr 1 '13 at 15:09




                        7




                        7





                        oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                        – Ian Ippolito
                        Jan 24 '14 at 21:04





                        oscpu worked inconsistently for me when I tested it across the 4 major browsers on Windows 7. @Ludwig's solution worked consistently.

                        – Ian Ippolito
                        Jan 24 '14 at 21:04













                        according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                        – Juan Carlos Alpizar Chinchilla
                        May 6 '14 at 2:30





                        according to wikpedia, en.wikipedia.org/wiki/Windows_NT_6.1 windows NT 6.1 can be either win 7, win 2008 server or windows small business server, is there a way determine which one is which?

                        – Juan Carlos Alpizar Chinchilla
                        May 6 '14 at 2:30




                        80




                        80





                        window.navigator.oscpu is undefined in chrome

                        – Curtis
                        Sep 2 '14 at 21:11





                        window.navigator.oscpu is undefined in chrome

                        – Curtis
                        Sep 2 '14 at 21:11




                        5




                        5





                        window.navigator.platform has got the OS in Chrome.

                        – Ketha Kavya
                        Sep 19 '16 at 5:55





                        window.navigator.platform has got the OS in Chrome.

                        – Ketha Kavya
                        Sep 19 '16 at 5:55













                        182














                        I started to write a Script to read OS and browser version that can be tested on Fiddle. Feel free to use and extend.



                        /**
                        * 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:'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;
                        }

                        // 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 + 'nn' +
                        'Full User Agent: ' + navigator.userAgent
                        );





                        share|improve this answer


























                        • This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                          – xxstevenxo
                          Oct 13 '13 at 15:53






                        • 1





                          Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                          – Eadel
                          Oct 29 '14 at 8:35








                        • 1





                          @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                          – Ludwig
                          Jun 3 '15 at 8:23








                        • 12





                          I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                          – Keith Shaw
                          Sep 11 '15 at 18:31






                        • 2





                          Added a detection for 'Edge'

                          – Ludwig
                          Oct 14 '16 at 12:51
















                        182














                        I started to write a Script to read OS and browser version that can be tested on Fiddle. Feel free to use and extend.



                        /**
                        * 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:'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;
                        }

                        // 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 + 'nn' +
                        'Full User Agent: ' + navigator.userAgent
                        );





                        share|improve this answer


























                        • This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                          – xxstevenxo
                          Oct 13 '13 at 15:53






                        • 1





                          Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                          – Eadel
                          Oct 29 '14 at 8:35








                        • 1





                          @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                          – Ludwig
                          Jun 3 '15 at 8:23








                        • 12





                          I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                          – Keith Shaw
                          Sep 11 '15 at 18:31






                        • 2





                          Added a detection for 'Edge'

                          – Ludwig
                          Oct 14 '16 at 12:51














                        182












                        182








                        182







                        I started to write a Script to read OS and browser version that can be tested on Fiddle. Feel free to use and extend.



                        /**
                        * 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:'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;
                        }

                        // 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 + 'nn' +
                        'Full User Agent: ' + navigator.userAgent
                        );





                        share|improve this answer















                        I started to write a Script to read OS and browser version that can be tested on Fiddle. Feel free to use and extend.



                        /**
                        * 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:'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;
                        }

                        // 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 + 'nn' +
                        'Full User Agent: ' + navigator.userAgent
                        );






                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Jan 18 '17 at 15:26









                        kmonsoor

                        3,78932846




                        3,78932846










                        answered Sep 9 '13 at 20:51









                        LudwigLudwig

                        2,42511218




                        2,42511218













                        • This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                          – xxstevenxo
                          Oct 13 '13 at 15:53






                        • 1





                          Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                          – Eadel
                          Oct 29 '14 at 8:35








                        • 1





                          @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                          – Ludwig
                          Jun 3 '15 at 8:23








                        • 12





                          I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                          – Keith Shaw
                          Sep 11 '15 at 18:31






                        • 2





                          Added a detection for 'Edge'

                          – Ludwig
                          Oct 14 '16 at 12:51



















                        • This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                          – xxstevenxo
                          Oct 13 '13 at 15:53






                        • 1





                          Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                          – Eadel
                          Oct 29 '14 at 8:35








                        • 1





                          @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                          – Ludwig
                          Jun 3 '15 at 8:23








                        • 12





                          I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                          – Keith Shaw
                          Sep 11 '15 at 18:31






                        • 2





                          Added a detection for 'Edge'

                          – Ludwig
                          Oct 14 '16 at 12:51

















                        This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                        – xxstevenxo
                        Oct 13 '13 at 15:53





                        This is perfect! Well written, easy to understand and it collects all the valuable information anyone would need. Thank you for taking the time to post this!

                        – xxstevenxo
                        Oct 13 '13 at 15:53




                        1




                        1





                        Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                        – Eadel
                        Oct 29 '14 at 8:35







                        Nice solution, but unfortunately doesn't work correctly for Opera Next (en.wikipedia.org/wiki/…). It is detected as Chrome. In order to check for it, get index of 'OPR' in user agent.

                        – Eadel
                        Oct 29 '14 at 8:35






                        1




                        1





                        @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                        – Ludwig
                        Jun 3 '15 at 8:23







                        @akapelko Unfortunately Microsoft uses the same version numbers for multiple OS (see msdn.microsoft.com/en-us/library/windows/desktop/…)

                        – Ludwig
                        Jun 3 '15 at 8:23






                        12




                        12





                        I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                        – Keith Shaw
                        Sep 11 '15 at 18:31





                        I was inspired by @Ludwig's code and created an open-sourced project on GitHub. github.com/keithws/browser-report

                        – Keith Shaw
                        Sep 11 '15 at 18:31




                        2




                        2





                        Added a detection for 'Edge'

                        – Ludwig
                        Oct 14 '16 at 12:51





                        Added a detection for 'Edge'

                        – Ludwig
                        Oct 14 '16 at 12:51











                        58














                        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";





                        share|improve this answer


























                        • This is an excellent answer :)

                          – www139
                          Dec 26 '15 at 12:02






                        • 38





                          I like the word else...

                          – Jeff
                          Oct 28 '16 at 14:52






                        • 3





                          What about iOS and Android and ...

                          – Bennett McElwee
                          Aug 21 '17 at 22:02






                        • 1





                          @Jeff something something premature optimisation :)

                          – RozzA
                          Jan 29 '18 at 2:33













                        • very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                          – eaglei22
                          Aug 30 '18 at 15:02
















                        58














                        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";





                        share|improve this answer


























                        • This is an excellent answer :)

                          – www139
                          Dec 26 '15 at 12:02






                        • 38





                          I like the word else...

                          – Jeff
                          Oct 28 '16 at 14:52






                        • 3





                          What about iOS and Android and ...

                          – Bennett McElwee
                          Aug 21 '17 at 22:02






                        • 1





                          @Jeff something something premature optimisation :)

                          – RozzA
                          Jan 29 '18 at 2:33













                        • very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                          – eaglei22
                          Aug 30 '18 at 15:02














                        58












                        58








                        58







                        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";





                        share|improve this answer















                        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";






                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Feb 1 '17 at 8:25









                        Robert Schouten

                        32




                        32










                        answered Oct 4 '13 at 8:36









                        Havaligi SathishHavaligi Sathish

                        60753




                        60753













                        • This is an excellent answer :)

                          – www139
                          Dec 26 '15 at 12:02






                        • 38





                          I like the word else...

                          – Jeff
                          Oct 28 '16 at 14:52






                        • 3





                          What about iOS and Android and ...

                          – Bennett McElwee
                          Aug 21 '17 at 22:02






                        • 1





                          @Jeff something something premature optimisation :)

                          – RozzA
                          Jan 29 '18 at 2:33













                        • very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                          – eaglei22
                          Aug 30 '18 at 15:02



















                        • This is an excellent answer :)

                          – www139
                          Dec 26 '15 at 12:02






                        • 38





                          I like the word else...

                          – Jeff
                          Oct 28 '16 at 14:52






                        • 3





                          What about iOS and Android and ...

                          – Bennett McElwee
                          Aug 21 '17 at 22:02






                        • 1





                          @Jeff something something premature optimisation :)

                          – RozzA
                          Jan 29 '18 at 2:33













                        • very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                          – eaglei22
                          Aug 30 '18 at 15:02

















                        This is an excellent answer :)

                        – www139
                        Dec 26 '15 at 12:02





                        This is an excellent answer :)

                        – www139
                        Dec 26 '15 at 12:02




                        38




                        38





                        I like the word else...

                        – Jeff
                        Oct 28 '16 at 14:52





                        I like the word else...

                        – Jeff
                        Oct 28 '16 at 14:52




                        3




                        3





                        What about iOS and Android and ...

                        – Bennett McElwee
                        Aug 21 '17 at 22:02





                        What about iOS and Android and ...

                        – Bennett McElwee
                        Aug 21 '17 at 22:02




                        1




                        1





                        @Jeff something something premature optimisation :)

                        – RozzA
                        Jan 29 '18 at 2:33







                        @Jeff something something premature optimisation :)

                        – RozzA
                        Jan 29 '18 at 2:33















                        very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                        – eaglei22
                        Aug 30 '18 at 15:02





                        very simplistic, cut and dry answer.. all I needed. The other answers are too customized.

                        – eaglei22
                        Aug 30 '18 at 15:02











                        11














                        @Ludwig 's solution was brilliant. A couple of fixes (which didn't have to do with operating system, and I couldn't place as a comment on his original posting because this is too long):




                        1. IE 11 no longer identifies itself as MS IE.

                        2. Chrome on IOS spoofs itself as Safari


                        Here they are:



                        (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));





                        share|improve this answer


























                        • I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                          – Todd Horst
                          Mar 12 '14 at 14:40











                        • So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                          – RobG
                          Oct 20 '15 at 22:26











                        • @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                          – Vijay
                          Nov 29 '17 at 13:06
















                        11














                        @Ludwig 's solution was brilliant. A couple of fixes (which didn't have to do with operating system, and I couldn't place as a comment on his original posting because this is too long):




                        1. IE 11 no longer identifies itself as MS IE.

                        2. Chrome on IOS spoofs itself as Safari


                        Here they are:



                        (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));





                        share|improve this answer


























                        • I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                          – Todd Horst
                          Mar 12 '14 at 14:40











                        • So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                          – RobG
                          Oct 20 '15 at 22:26











                        • @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                          – Vijay
                          Nov 29 '17 at 13:06














                        11












                        11








                        11







                        @Ludwig 's solution was brilliant. A couple of fixes (which didn't have to do with operating system, and I couldn't place as a comment on his original posting because this is too long):




                        1. IE 11 no longer identifies itself as MS IE.

                        2. Chrome on IOS spoofs itself as Safari


                        Here they are:



                        (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));





                        share|improve this answer















                        @Ludwig 's solution was brilliant. A couple of fixes (which didn't have to do with operating system, and I couldn't place as a comment on his original posting because this is too long):




                        1. IE 11 no longer identifies itself as MS IE.

                        2. Chrome on IOS spoofs itself as Safari


                        Here they are:



                        (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));






                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Jan 24 '14 at 20:59

























                        answered Jan 24 '14 at 20:42









                        Ian IppolitoIan Ippolito

                        38836




                        38836













                        • I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                          – Todd Horst
                          Mar 12 '14 at 14:40











                        • So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                          – RobG
                          Oct 20 '15 at 22:26











                        • @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                          – Vijay
                          Nov 29 '17 at 13:06



















                        • I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                          – Todd Horst
                          Mar 12 '14 at 14:40











                        • So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                          – RobG
                          Oct 20 '15 at 22:26











                        • @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                          – Vijay
                          Nov 29 '17 at 13:06

















                        I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                        – Todd Horst
                        Mar 12 '14 at 14:40





                        I've started a github repo based on this. github.com/thorst/Browser. Aiming to be minimal, but have enough coverage.

                        – Todd Horst
                        Mar 12 '14 at 14:40













                        So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                        – RobG
                        Oct 20 '15 at 22:26





                        So now all you have to do is keep updating it for every browser on every device as they're released. I don't see "Samsung SmartTV" anywhere.

                        – RobG
                        Oct 20 '15 at 22:26













                        @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                        – Vijay
                        Nov 29 '17 at 13:06





                        @Ian Ippolito this is very helpful many thanks. Also i would like to know how can we find the edge browser and its version.

                        – Vijay
                        Nov 29 '17 at 13:06











                        8














                        JavaScript have access to the window.navigator.platform - a string representing the platform of the browser: https://developer.mozilla.org/en/DOM/window.navigator.platform



                        Use it to extract whatever details you need (and can). Note that there are no guarantees that the client actually uses that platform since this can easily be modified in many ways.






                        share|improve this answer



















                        • 4





                          "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                          – Con Antonakos
                          Mar 8 '16 at 4:10






                        • 1





                          @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                          – Splaktar
                          Sep 24 '17 at 6:16






                        • 2





                          @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                          – Con Antonakos
                          Sep 25 '17 at 17:19













                        • I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                          – Gark Garcia
                          Jan 21 at 11:34











                        • UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                          – Gark Garcia
                          Jan 21 at 12:41
















                        8














                        JavaScript have access to the window.navigator.platform - a string representing the platform of the browser: https://developer.mozilla.org/en/DOM/window.navigator.platform



                        Use it to extract whatever details you need (and can). Note that there are no guarantees that the client actually uses that platform since this can easily be modified in many ways.






                        share|improve this answer



















                        • 4





                          "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                          – Con Antonakos
                          Mar 8 '16 at 4:10






                        • 1





                          @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                          – Splaktar
                          Sep 24 '17 at 6:16






                        • 2





                          @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                          – Con Antonakos
                          Sep 25 '17 at 17:19













                        • I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                          – Gark Garcia
                          Jan 21 at 11:34











                        • UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                          – Gark Garcia
                          Jan 21 at 12:41














                        8












                        8








                        8







                        JavaScript have access to the window.navigator.platform - a string representing the platform of the browser: https://developer.mozilla.org/en/DOM/window.navigator.platform



                        Use it to extract whatever details you need (and can). Note that there are no guarantees that the client actually uses that platform since this can easily be modified in many ways.






                        share|improve this answer













                        JavaScript have access to the window.navigator.platform - a string representing the platform of the browser: https://developer.mozilla.org/en/DOM/window.navigator.platform



                        Use it to extract whatever details you need (and can). Note that there are no guarantees that the client actually uses that platform since this can easily be modified in many ways.







                        share|improve this answer












                        share|improve this answer



                        share|improve this answer










                        answered Mar 1 '12 at 10:11









                        David HellsingDavid Hellsing

                        73.6k37149189




                        73.6k37149189








                        • 4





                          "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                          – Con Antonakos
                          Mar 8 '16 at 4:10






                        • 1





                          @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                          – Splaktar
                          Sep 24 '17 at 6:16






                        • 2





                          @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                          – Con Antonakos
                          Sep 25 '17 at 17:19













                        • I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                          – Gark Garcia
                          Jan 21 at 11:34











                        • UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                          – Gark Garcia
                          Jan 21 at 12:41














                        • 4





                          "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                          – Con Antonakos
                          Mar 8 '16 at 4:10






                        • 1





                          @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                          – Splaktar
                          Sep 24 '17 at 6:16






                        • 2





                          @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                          – Con Antonakos
                          Sep 25 '17 at 17:19













                        • I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                          – Gark Garcia
                          Jan 21 at 11:34











                        • UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                          – Gark Garcia
                          Jan 21 at 12:41








                        4




                        4





                        "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                        – Con Antonakos
                        Mar 8 '16 at 4:10





                        "This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped. Do not use it in old or new projects. Pages or Web apps using it may break at any time."

                        – Con Antonakos
                        Mar 8 '16 at 4:10




                        1




                        1





                        @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                        – Splaktar
                        Sep 24 '17 at 6:16





                        @ConAntonakos can you provide a reference for that statement? That isn't mentioned in the MDN link in this answer.

                        – Splaktar
                        Sep 24 '17 at 6:16




                        2




                        2





                        @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                        – Con Antonakos
                        Sep 25 '17 at 17:19







                        @Splaktar - That's so odd. That messaged was definitely there, but I see it's not anymore. I think at some point in 2016 it was considered? I also see this question (stackoverflow.com/questions/38506517/…), so someone else noticed it as well. Thanks for the update.

                        – Con Antonakos
                        Sep 25 '17 at 17:19















                        I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                        – Gark Garcia
                        Jan 21 at 11:34





                        I think the docs are messed up, it still says it's deprecated in the portuguese version: developer.mozilla.org/pt-BR/docs/Web/API/NavigatorID/platform

                        – Gark Garcia
                        Jan 21 at 11:34













                        UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                        – Gark Garcia
                        Jan 21 at 12:41





                        UPDATE: I fixed the portuguese docs and I verified that the english docs were indeed corrected at some point.

                        – Gark Garcia
                        Jan 21 at 12:41











                        6














                        platform.js seems like a good one file library to do this.



                        Usage example:



                        // 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'





                        share|improve this answer




























                          6














                          platform.js seems like a good one file library to do this.



                          Usage example:



                          // 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'





                          share|improve this answer


























                            6












                            6








                            6







                            platform.js seems like a good one file library to do this.



                            Usage example:



                            // 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'





                            share|improve this answer













                            platform.js seems like a good one file library to do this.



                            Usage example:



                            // 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'






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Oct 20 '14 at 19:35









                            catlancatlan

                            19.5k85768




                            19.5k85768























                                3














                                You can find the OS name and version in the navigator object, as others have answered. The standard, cross-browser place to find this information is in the navigator.userAgent property. However, user agent strings vary widely by OS and browser.



                                So, I created a script to encapsulate this logic and report on the most common OSes and browsers in a familiar way, like http://www.whatsmybrowser.org.



                                I open-sourced the script and uploaded it to github, https://github.com/keithws/browser-report. Pull requests are welcome!






                                share|improve this answer




























                                  3














                                  You can find the OS name and version in the navigator object, as others have answered. The standard, cross-browser place to find this information is in the navigator.userAgent property. However, user agent strings vary widely by OS and browser.



                                  So, I created a script to encapsulate this logic and report on the most common OSes and browsers in a familiar way, like http://www.whatsmybrowser.org.



                                  I open-sourced the script and uploaded it to github, https://github.com/keithws/browser-report. Pull requests are welcome!






                                  share|improve this answer


























                                    3












                                    3








                                    3







                                    You can find the OS name and version in the navigator object, as others have answered. The standard, cross-browser place to find this information is in the navigator.userAgent property. However, user agent strings vary widely by OS and browser.



                                    So, I created a script to encapsulate this logic and report on the most common OSes and browsers in a familiar way, like http://www.whatsmybrowser.org.



                                    I open-sourced the script and uploaded it to github, https://github.com/keithws/browser-report. Pull requests are welcome!






                                    share|improve this answer













                                    You can find the OS name and version in the navigator object, as others have answered. The standard, cross-browser place to find this information is in the navigator.userAgent property. However, user agent strings vary widely by OS and browser.



                                    So, I created a script to encapsulate this logic and report on the most common OSes and browsers in a familiar way, like http://www.whatsmybrowser.org.



                                    I open-sourced the script and uploaded it to github, https://github.com/keithws/browser-report. Pull requests are welcome!







                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Sep 11 '15 at 18:27









                                    Keith ShawKeith Shaw

                                    44845




                                    44845























                                        2














                                        You can use this javascript function to check users' OS simply



                                          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());





                                        share|improve this answer




























                                          2














                                          You can use this javascript function to check users' OS simply



                                            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());





                                          share|improve this answer


























                                            2












                                            2








                                            2







                                            You can use this javascript function to check users' OS simply



                                              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());





                                            share|improve this answer













                                            You can use this javascript function to check users' OS simply



                                              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());






                                            share|improve this answer












                                            share|improve this answer



                                            share|improve this answer










                                            answered May 28 '18 at 22:47









                                            Jananath BanukaJananath Banuka

                                            1212313




                                            1212313























                                                1














                                                I've created a library for parsing User Agent strings called Voodoo. But be aware that this should not be used instead of feature detection.



                                                What Voodoo does, is that it parses the userAgent string, which is found in the Navigator object (window.navigator). It's not all browsers that passes a reliable userAgent string, so even though it's the normal way to do it, the userAgent can not always be trusted.






                                                share|improve this answer
























                                                • I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                  – lolol
                                                  May 10 '13 at 21:28
















                                                1














                                                I've created a library for parsing User Agent strings called Voodoo. But be aware that this should not be used instead of feature detection.



                                                What Voodoo does, is that it parses the userAgent string, which is found in the Navigator object (window.navigator). It's not all browsers that passes a reliable userAgent string, so even though it's the normal way to do it, the userAgent can not always be trusted.






                                                share|improve this answer
























                                                • I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                  – lolol
                                                  May 10 '13 at 21:28














                                                1












                                                1








                                                1







                                                I've created a library for parsing User Agent strings called Voodoo. But be aware that this should not be used instead of feature detection.



                                                What Voodoo does, is that it parses the userAgent string, which is found in the Navigator object (window.navigator). It's not all browsers that passes a reliable userAgent string, so even though it's the normal way to do it, the userAgent can not always be trusted.






                                                share|improve this answer













                                                I've created a library for parsing User Agent strings called Voodoo. But be aware that this should not be used instead of feature detection.



                                                What Voodoo does, is that it parses the userAgent string, which is found in the Navigator object (window.navigator). It's not all browsers that passes a reliable userAgent string, so even though it's the normal way to do it, the userAgent can not always be trusted.







                                                share|improve this answer












                                                share|improve this answer



                                                share|improve this answer










                                                answered Mar 1 '12 at 10:15









                                                SaebekassebilSaebekassebil

                                                64449




                                                64449













                                                • I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                  – lolol
                                                  May 10 '13 at 21:28



















                                                • I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                  – lolol
                                                  May 10 '13 at 21:28

















                                                I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                – lolol
                                                May 10 '13 at 21:28





                                                I loved the Voodoo, but I think should be a way to easily distinguish between mobile, tablet etc... please post it at gittip so I can tip you for the nice job.

                                                – lolol
                                                May 10 '13 at 21:28











                                                1














                                                Use detectOS.js:



                                                var Detect = {
                                                init: function () {
                                                this.OS = this.searchString(this.dataOS);
                                                },
                                                searchString: function (data) {
                                                for (var i=0;i<data.length;i++) {
                                                var dataString = data[i].string;
                                                var dataProp = data[i].prop;
                                                if (dataString) {
                                                if (dataString.indexOf(data[i].subString) != -1)
                                                return data[i].identity;
                                                }
                                                else if (dataProp)
                                                return data[i].identity;
                                                }
                                                },
                                                dataOS : [
                                                {
                                                string: navigator.platform,
                                                subString: 'Win',
                                                identity: 'Windows'
                                                },
                                                {
                                                string: navigator.platform,
                                                subString: 'Mac',
                                                identity: 'macOS'
                                                },
                                                {
                                                string: navigator.userAgent,
                                                subString: 'iPhone',
                                                identity: 'iOS'
                                                },
                                                {
                                                string: navigator.userAgent,
                                                subString: 'iPad',
                                                identity: 'iOS'
                                                },
                                                {
                                                string: navigator.userAgent,
                                                subString: 'iPod',
                                                identity: 'iOS'
                                                },
                                                {
                                                string: navigator.userAgent,
                                                subString: 'Android',
                                                identity: 'Android'
                                                },
                                                {
                                                string: navigator.platform,
                                                subString: 'Linux',
                                                identity: 'Linux'
                                                }
                                                ]
                                                };

                                                Detect.init();

                                                console.log("We know your OS – it's " + Detect.OS + ". We know everything about you.");





                                                share|improve this answer




























                                                  1














                                                  Use detectOS.js:



                                                  var Detect = {
                                                  init: function () {
                                                  this.OS = this.searchString(this.dataOS);
                                                  },
                                                  searchString: function (data) {
                                                  for (var i=0;i<data.length;i++) {
                                                  var dataString = data[i].string;
                                                  var dataProp = data[i].prop;
                                                  if (dataString) {
                                                  if (dataString.indexOf(data[i].subString) != -1)
                                                  return data[i].identity;
                                                  }
                                                  else if (dataProp)
                                                  return data[i].identity;
                                                  }
                                                  },
                                                  dataOS : [
                                                  {
                                                  string: navigator.platform,
                                                  subString: 'Win',
                                                  identity: 'Windows'
                                                  },
                                                  {
                                                  string: navigator.platform,
                                                  subString: 'Mac',
                                                  identity: 'macOS'
                                                  },
                                                  {
                                                  string: navigator.userAgent,
                                                  subString: 'iPhone',
                                                  identity: 'iOS'
                                                  },
                                                  {
                                                  string: navigator.userAgent,
                                                  subString: 'iPad',
                                                  identity: 'iOS'
                                                  },
                                                  {
                                                  string: navigator.userAgent,
                                                  subString: 'iPod',
                                                  identity: 'iOS'
                                                  },
                                                  {
                                                  string: navigator.userAgent,
                                                  subString: 'Android',
                                                  identity: 'Android'
                                                  },
                                                  {
                                                  string: navigator.platform,
                                                  subString: 'Linux',
                                                  identity: 'Linux'
                                                  }
                                                  ]
                                                  };

                                                  Detect.init();

                                                  console.log("We know your OS – it's " + Detect.OS + ". We know everything about you.");





                                                  share|improve this answer


























                                                    1












                                                    1








                                                    1







                                                    Use detectOS.js:



                                                    var Detect = {
                                                    init: function () {
                                                    this.OS = this.searchString(this.dataOS);
                                                    },
                                                    searchString: function (data) {
                                                    for (var i=0;i<data.length;i++) {
                                                    var dataString = data[i].string;
                                                    var dataProp = data[i].prop;
                                                    if (dataString) {
                                                    if (dataString.indexOf(data[i].subString) != -1)
                                                    return data[i].identity;
                                                    }
                                                    else if (dataProp)
                                                    return data[i].identity;
                                                    }
                                                    },
                                                    dataOS : [
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Win',
                                                    identity: 'Windows'
                                                    },
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Mac',
                                                    identity: 'macOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPhone',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPad',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPod',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'Android',
                                                    identity: 'Android'
                                                    },
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Linux',
                                                    identity: 'Linux'
                                                    }
                                                    ]
                                                    };

                                                    Detect.init();

                                                    console.log("We know your OS – it's " + Detect.OS + ". We know everything about you.");





                                                    share|improve this answer













                                                    Use detectOS.js:



                                                    var Detect = {
                                                    init: function () {
                                                    this.OS = this.searchString(this.dataOS);
                                                    },
                                                    searchString: function (data) {
                                                    for (var i=0;i<data.length;i++) {
                                                    var dataString = data[i].string;
                                                    var dataProp = data[i].prop;
                                                    if (dataString) {
                                                    if (dataString.indexOf(data[i].subString) != -1)
                                                    return data[i].identity;
                                                    }
                                                    else if (dataProp)
                                                    return data[i].identity;
                                                    }
                                                    },
                                                    dataOS : [
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Win',
                                                    identity: 'Windows'
                                                    },
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Mac',
                                                    identity: 'macOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPhone',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPad',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'iPod',
                                                    identity: 'iOS'
                                                    },
                                                    {
                                                    string: navigator.userAgent,
                                                    subString: 'Android',
                                                    identity: 'Android'
                                                    },
                                                    {
                                                    string: navigator.platform,
                                                    subString: 'Linux',
                                                    identity: 'Linux'
                                                    }
                                                    ]
                                                    };

                                                    Detect.init();

                                                    console.log("We know your OS – it's " + Detect.OS + ". We know everything about you.");






                                                    share|improve this answer












                                                    share|improve this answer



                                                    share|improve this answer










                                                    answered Jul 28 '17 at 8:00









                                                    VadizarVadizar

                                                    693517




                                                    693517























                                                        0














                                                        I fork @Ludwig code and remove necessity of swfobject.



                                                        I just use swfobject code for detect flash version.



                                                        /**
                                                        * 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);
                                                        }
                                                        }
                                                        // 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:'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;
                                                        }

                                                        var flashVersion = 'no check', d, fv = ;
                                                        if (typeof navigator.plugins !== 'undefined' && typeof navigator.plugins["Shockwave Flash"] === "object") {
                                                        d = navigator.plugins["Shockwave Flash"].description;
                                                        if (d && !(typeof navigator.mimeTypes !== 'undefined' && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                                                        d = d.replace(/^.*s+(S+s+S+$)/, "$1");
                                                        fv[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
                                                        fv[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
                                                        fv[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                                                        }
                                                        } else if (typeof window.ActiveXObject !== 'undefined') {
                                                        try {
                                                        var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                                                        if (a) { // a will return null when ActiveX is disabled
                                                        d = a.GetVariable("$version");
                                                        if (d) {
                                                        d = d.split(" ")[1].split(",");
                                                        fv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                                                        }
                                                        }
                                                        }
                                                        catch(e) {}
                                                        }
                                                        if (fv.length) {
                                                        flashVersion = fv[0] + '.' + fv[1] + ' r' + fv[2];
                                                        }
                                                        }

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

                                                        alert(
                                                        'OS: ' + jscd.os +' '+ jscd.osVersion + 'n'+
                                                        'Browser: ' + jscd.browser +' '+ jscd.browserVersion + 'n' +
                                                        'Mobile: ' + jscd.mobile + 'n' +
                                                        'Flash: ' + jscd.flashVersion + 'n' +
                                                        'Cookies: ' + jscd.cookies + 'n' +
                                                        'Screen Size: ' + jscd.screen + 'nn' +
                                                        'Full User Agent: ' + navigator.userAgent
                                                        );





                                                        share|improve this answer




























                                                          0














                                                          I fork @Ludwig code and remove necessity of swfobject.



                                                          I just use swfobject code for detect flash version.



                                                          /**
                                                          * 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);
                                                          }
                                                          }
                                                          // 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:'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;
                                                          }

                                                          var flashVersion = 'no check', d, fv = ;
                                                          if (typeof navigator.plugins !== 'undefined' && typeof navigator.plugins["Shockwave Flash"] === "object") {
                                                          d = navigator.plugins["Shockwave Flash"].description;
                                                          if (d && !(typeof navigator.mimeTypes !== 'undefined' && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                                                          d = d.replace(/^.*s+(S+s+S+$)/, "$1");
                                                          fv[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
                                                          fv[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
                                                          fv[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                                                          }
                                                          } else if (typeof window.ActiveXObject !== 'undefined') {
                                                          try {
                                                          var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                                                          if (a) { // a will return null when ActiveX is disabled
                                                          d = a.GetVariable("$version");
                                                          if (d) {
                                                          d = d.split(" ")[1].split(",");
                                                          fv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                                                          }
                                                          }
                                                          }
                                                          catch(e) {}
                                                          }
                                                          if (fv.length) {
                                                          flashVersion = fv[0] + '.' + fv[1] + ' r' + fv[2];
                                                          }
                                                          }

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

                                                          alert(
                                                          'OS: ' + jscd.os +' '+ jscd.osVersion + 'n'+
                                                          'Browser: ' + jscd.browser +' '+ jscd.browserVersion + 'n' +
                                                          'Mobile: ' + jscd.mobile + 'n' +
                                                          'Flash: ' + jscd.flashVersion + 'n' +
                                                          'Cookies: ' + jscd.cookies + 'n' +
                                                          'Screen Size: ' + jscd.screen + 'nn' +
                                                          'Full User Agent: ' + navigator.userAgent
                                                          );





                                                          share|improve this answer


























                                                            0












                                                            0








                                                            0







                                                            I fork @Ludwig code and remove necessity of swfobject.



                                                            I just use swfobject code for detect flash version.



                                                            /**
                                                            * 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);
                                                            }
                                                            }
                                                            // 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:'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;
                                                            }

                                                            var flashVersion = 'no check', d, fv = ;
                                                            if (typeof navigator.plugins !== 'undefined' && typeof navigator.plugins["Shockwave Flash"] === "object") {
                                                            d = navigator.plugins["Shockwave Flash"].description;
                                                            if (d && !(typeof navigator.mimeTypes !== 'undefined' && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                                                            d = d.replace(/^.*s+(S+s+S+$)/, "$1");
                                                            fv[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
                                                            fv[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
                                                            fv[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                                                            }
                                                            } else if (typeof window.ActiveXObject !== 'undefined') {
                                                            try {
                                                            var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                                                            if (a) { // a will return null when ActiveX is disabled
                                                            d = a.GetVariable("$version");
                                                            if (d) {
                                                            d = d.split(" ")[1].split(",");
                                                            fv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                                                            }
                                                            }
                                                            }
                                                            catch(e) {}
                                                            }
                                                            if (fv.length) {
                                                            flashVersion = fv[0] + '.' + fv[1] + ' r' + fv[2];
                                                            }
                                                            }

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

                                                            alert(
                                                            'OS: ' + jscd.os +' '+ jscd.osVersion + 'n'+
                                                            'Browser: ' + jscd.browser +' '+ jscd.browserVersion + 'n' +
                                                            'Mobile: ' + jscd.mobile + 'n' +
                                                            'Flash: ' + jscd.flashVersion + 'n' +
                                                            'Cookies: ' + jscd.cookies + 'n' +
                                                            'Screen Size: ' + jscd.screen + 'nn' +
                                                            'Full User Agent: ' + navigator.userAgent
                                                            );





                                                            share|improve this answer













                                                            I fork @Ludwig code and remove necessity of swfobject.



                                                            I just use swfobject code for detect flash version.



                                                            /**
                                                            * 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);
                                                            }
                                                            }
                                                            // 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:'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;
                                                            }

                                                            var flashVersion = 'no check', d, fv = ;
                                                            if (typeof navigator.plugins !== 'undefined' && typeof navigator.plugins["Shockwave Flash"] === "object") {
                                                            d = navigator.plugins["Shockwave Flash"].description;
                                                            if (d && !(typeof navigator.mimeTypes !== 'undefined' && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
                                                            d = d.replace(/^.*s+(S+s+S+$)/, "$1");
                                                            fv[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
                                                            fv[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
                                                            fv[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
                                                            }
                                                            } else if (typeof window.ActiveXObject !== 'undefined') {
                                                            try {
                                                            var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                                                            if (a) { // a will return null when ActiveX is disabled
                                                            d = a.GetVariable("$version");
                                                            if (d) {
                                                            d = d.split(" ")[1].split(",");
                                                            fv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
                                                            }
                                                            }
                                                            }
                                                            catch(e) {}
                                                            }
                                                            if (fv.length) {
                                                            flashVersion = fv[0] + '.' + fv[1] + ' r' + fv[2];
                                                            }
                                                            }

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

                                                            alert(
                                                            'OS: ' + jscd.os +' '+ jscd.osVersion + 'n'+
                                                            'Browser: ' + jscd.browser +' '+ jscd.browserVersion + 'n' +
                                                            'Mobile: ' + jscd.mobile + 'n' +
                                                            'Flash: ' + jscd.flashVersion + 'n' +
                                                            'Cookies: ' + jscd.cookies + 'n' +
                                                            'Screen Size: ' + jscd.screen + 'nn' +
                                                            'Full User Agent: ' + navigator.userAgent
                                                            );






                                                            share|improve this answer












                                                            share|improve this answer



                                                            share|improve this answer










                                                            answered Jul 10 '15 at 18:52









                                                            MNBMNB

                                                            191




                                                            191























                                                                0














                                                                I can't comment on @Ian Ippolito answer (because I would have if I had the rep) but according to the document his comment linked, I'm fairly certain you can find the Chrome version for IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja lists the UA as: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1



                                                                So this should work:



                                                                if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                                                                //Chrome on iPad spoofing Safari...correct it.
                                                                browser = 'Chrome';
                                                                version = nAgt.substring(verOffset + 6);//should get the criOS ver.
                                                                }


                                                                Haven't been able to test (otherwise I would have improved his answer) it to make sure since my iPad is at home and I'm at work, but I thought I'd put it out there.






                                                                share|improve this answer




























                                                                  0














                                                                  I can't comment on @Ian Ippolito answer (because I would have if I had the rep) but according to the document his comment linked, I'm fairly certain you can find the Chrome version for IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja lists the UA as: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1



                                                                  So this should work:



                                                                  if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                                                                  //Chrome on iPad spoofing Safari...correct it.
                                                                  browser = 'Chrome';
                                                                  version = nAgt.substring(verOffset + 6);//should get the criOS ver.
                                                                  }


                                                                  Haven't been able to test (otherwise I would have improved his answer) it to make sure since my iPad is at home and I'm at work, but I thought I'd put it out there.






                                                                  share|improve this answer


























                                                                    0












                                                                    0








                                                                    0







                                                                    I can't comment on @Ian Ippolito answer (because I would have if I had the rep) but according to the document his comment linked, I'm fairly certain you can find the Chrome version for IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja lists the UA as: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1



                                                                    So this should work:



                                                                    if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                                                                    //Chrome on iPad spoofing Safari...correct it.
                                                                    browser = 'Chrome';
                                                                    version = nAgt.substring(verOffset + 6);//should get the criOS ver.
                                                                    }


                                                                    Haven't been able to test (otherwise I would have improved his answer) it to make sure since my iPad is at home and I'm at work, but I thought I'd put it out there.






                                                                    share|improve this answer













                                                                    I can't comment on @Ian Ippolito answer (because I would have if I had the rep) but according to the document his comment linked, I'm fairly certain you can find the Chrome version for IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja lists the UA as: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1



                                                                    So this should work:



                                                                    if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
                                                                    //Chrome on iPad spoofing Safari...correct it.
                                                                    browser = 'Chrome';
                                                                    version = nAgt.substring(verOffset + 6);//should get the criOS ver.
                                                                    }


                                                                    Haven't been able to test (otherwise I would have improved his answer) it to make sure since my iPad is at home and I'm at work, but I thought I'd put it out there.







                                                                    share|improve this answer












                                                                    share|improve this answer



                                                                    share|improve this answer










                                                                    answered Mar 9 '17 at 21:50









                                                                    RMSDRMSD

                                                                    33427




                                                                    33427























                                                                        0














                                                                        Hey for a quick solution you can consider the following library : UAPARSER - https://www.npmjs.com/package/ua-parser-js



                                                                        example :



                                                                        <script type="text/javascript" src="ua-parser.min.js"></script>
                                                                        <script type="text/javascript">

                                                                        var parser = new UAParser();
                                                                        console.log(parser.getOS()) // will log {name: "", version:""}


                                                                        you can also install the library via npm, and import it like this:



                                                                        import { UAParser } from 'ua-parser-js';
                                                                        let parser = new UAParser();
                                                                        parser.getOS();


                                                                        the library is a JS based user agent string parser (window.navigator.userAgent is the user agent on browser) , so you can get with it other details aswell such as Browser,device,engines etc..and it can work with node js as well.



                                                                        if you need typing for the library : https://www.npmjs.com/package/@types/ua-parser-js






                                                                        share|improve this answer




























                                                                          0














                                                                          Hey for a quick solution you can consider the following library : UAPARSER - https://www.npmjs.com/package/ua-parser-js



                                                                          example :



                                                                          <script type="text/javascript" src="ua-parser.min.js"></script>
                                                                          <script type="text/javascript">

                                                                          var parser = new UAParser();
                                                                          console.log(parser.getOS()) // will log {name: "", version:""}


                                                                          you can also install the library via npm, and import it like this:



                                                                          import { UAParser } from 'ua-parser-js';
                                                                          let parser = new UAParser();
                                                                          parser.getOS();


                                                                          the library is a JS based user agent string parser (window.navigator.userAgent is the user agent on browser) , so you can get with it other details aswell such as Browser,device,engines etc..and it can work with node js as well.



                                                                          if you need typing for the library : https://www.npmjs.com/package/@types/ua-parser-js






                                                                          share|improve this answer


























                                                                            0












                                                                            0








                                                                            0







                                                                            Hey for a quick solution you can consider the following library : UAPARSER - https://www.npmjs.com/package/ua-parser-js



                                                                            example :



                                                                            <script type="text/javascript" src="ua-parser.min.js"></script>
                                                                            <script type="text/javascript">

                                                                            var parser = new UAParser();
                                                                            console.log(parser.getOS()) // will log {name: "", version:""}


                                                                            you can also install the library via npm, and import it like this:



                                                                            import { UAParser } from 'ua-parser-js';
                                                                            let parser = new UAParser();
                                                                            parser.getOS();


                                                                            the library is a JS based user agent string parser (window.navigator.userAgent is the user agent on browser) , so you can get with it other details aswell such as Browser,device,engines etc..and it can work with node js as well.



                                                                            if you need typing for the library : https://www.npmjs.com/package/@types/ua-parser-js






                                                                            share|improve this answer













                                                                            Hey for a quick solution you can consider the following library : UAPARSER - https://www.npmjs.com/package/ua-parser-js



                                                                            example :



                                                                            <script type="text/javascript" src="ua-parser.min.js"></script>
                                                                            <script type="text/javascript">

                                                                            var parser = new UAParser();
                                                                            console.log(parser.getOS()) // will log {name: "", version:""}


                                                                            you can also install the library via npm, and import it like this:



                                                                            import { UAParser } from 'ua-parser-js';
                                                                            let parser = new UAParser();
                                                                            parser.getOS();


                                                                            the library is a JS based user agent string parser (window.navigator.userAgent is the user agent on browser) , so you can get with it other details aswell such as Browser,device,engines etc..and it can work with node js as well.



                                                                            if you need typing for the library : https://www.npmjs.com/package/@types/ua-parser-js







                                                                            share|improve this answer












                                                                            share|improve this answer



                                                                            share|improve this answer










                                                                            answered Dec 1 '18 at 23:18









                                                                            zzzzzzzz

                                                                            537




                                                                            537






























                                                                                draft saved

                                                                                draft discarded




















































                                                                                Thanks for contributing an answer to Stack Overflow!


                                                                                • Please be sure to answer the question. Provide details and share your research!

                                                                                But avoid



                                                                                • Asking for help, clarification, or responding to other answers.

                                                                                • Making statements based on opinion; back them up with references or personal experience.


                                                                                To learn more, see our tips on writing great answers.




                                                                                draft saved


                                                                                draft discarded














                                                                                StackExchange.ready(
                                                                                function () {
                                                                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9514179%2fhow-to-find-the-operating-system-version-using-javascript%23new-answer', 'question_page');
                                                                                }
                                                                                );

                                                                                Post as a guest















                                                                                Required, but never shown





















































                                                                                Required, but never shown














                                                                                Required, but never shown












                                                                                Required, but never shown







                                                                                Required, but never shown

































                                                                                Required, but never shown














                                                                                Required, but never shown












                                                                                Required, but never shown







                                                                                Required, but never shown







                                                                                這個網誌中的熱門文章

                                                                                Hercules Kyvelos

                                                                                Tangent Lines Diagram Along Smooth Curve

                                                                                Yusuf al-Mu'taman ibn Hud