We're often asked how to detect the browser and OS versions via JavaScript running in the Intenet zone. Thanks to Jeremy, Forest, David, and a few other folks on my team for help with these samples. I previously posted a sample that parses the userAgent string and compares it to a finite set of regular expressions to map to a specific IE browser version (including IE8) and then hide content on the page that does not apply to the detected version. The sample below maps a finite set of specific OS and browser combinations to route users to a corresponding page. You will need to add parsing for "windows nt 6.1" for Windows 7.

 

 <script>

function PageInfo(contentCode, osName, osArchitecture, browserName, browserTest) {

                this._contentCode = contentCode;

                this._osName = osName;

                this._osArchitecture = osArchitecture;

                this._browserName = browserName;

                this._browserTest  = browserTest;

}

 

PageInfo.prototype = {

                getContentCode: function() { return this._contentCode;},

                getOsName: function() { return this._osName;},

                getOsArchitecture: function(){ return this._osArchitecture;},

                getBrowserName: function() { return this._browserName;},

                browserTest: function(a) {

                                if(!this._browserTest)return false;

                                return this._browserTest.test(a); 

                }

}

 

 

function getUserAgentInfo(ua){              

                for(var k in PageInfoLookup){

                                if( PageInfoLookup[k].browserTest(ua)){

                                                return PageInfoLookup[k];

                                }

                }             

               

                return PageInfoLookup["FailOSIE"];

}

 

 

function AutoDetectNav(){

  var o = getUserAgentInfo(navigator.userAgent);

  return o;

}

 

var PageInfoLookup = new Object();

PageInfoLookup["2001"] = new PageInfo("2001","Windows Vista","x64","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 6\.0.*((Win64.*x64)|(WOW64))/);

PageInfoLookup["1001"] = new PageInfo("1001","Windows Vista","x64","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 6\.0.*((Win64.*x64)|(WOW64))/);

PageInfoLookup["1003"] = new PageInfo("1003","Windows Vista","x86","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 6\.0/);

PageInfoLookup["2000"] = new PageInfo("2000","Windows Vista","x86","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 6\.0/);

PageInfoLookup["2100"] = new PageInfo("2100","WinXP","x86","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 5\.1/);

PageInfoLookup["2101"] = new PageInfo("2101","WinXP|Win2k3","x64","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 5\.2.*(Win64.*x64)/);

PageInfoLookup["2102"] = new PageInfo("2102","WinXP|Win2k3","x64|IA64","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 5\.2.*WOW64/);

PageInfoLookup["2103"] = new PageInfo("2103","WinXP|Win2k3","IA64","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 5\.2.*Win64.*IA64/);

PageInfoLookup["0100"] = new PageInfo("0100","WinXP","x86","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 5\.1/);

PageInfoLookup["0010"] = new PageInfo("0010","winXP","x86","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.1/);

PageInfoLookup["0101"] = new PageInfo("0101","WinXP|Win2k3","x64","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 5\.2.*(Win64.*x64)/);

PageInfoLookup["0102"] = new PageInfo("0102","WinXP|Win2k3","x64|IA64","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 5\.2.*WOW64/);

PageInfoLookup["0103"] = new PageInfo("0103","WinXP|Win2k3","IA64","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 5\.2.*Win64.*IA64/);

PageInfoLookup["0104"] = new PageInfo("0104","WinXP|Win2k3","x64","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.2.*Win64.*x64/);

PageInfoLookup["0105"] = new PageInfo("0105","WinXP|Win2k3","x64|IA64","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.2.*WOW64/);

PageInfoLookup["0106"] = new PageInfo("0106","WinXP|Win2k3","IA64","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.2.*Win64.*IA64/);

PageInfoLookup["091"] = new PageInfo("091","WIn2k3","x86","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.2/);

PageInfoLookup["092"] = new PageInfo("092","Win2k3","x86","IE7",/^Mozilla\/4\.0.*MSIE 7\.\d+.*Windows NT 5\.2/);

PageInfoLookup["093"] = new PageInfo("093","Win2k3","x86","IE8",/^Mozilla\/4\.0.*MSIE 8\.\d+.*Windows NT 5\.2/);

PageInfoLookup["0001"] = new PageInfo("0001","Win2k","x86","IE6",/^Mozilla\/4\.0.*MSIE 6\.\d+.*Windows NT 5\.0/);

PageInfoLookup["900"] = new PageInfo("900","Win2k","x86","IE5",/^Mozilla\/4\.0.*MSIE 5\.\d+.*Windows NT 5\.0/);

PageInfoLookup["090"] = new PageInfo("090","Win95|Win98|WinNT4","x86","",/^Mozilla\/4\.0.*MSIE \d+\.\d+.*Windows (NT 4\.0|(95|98|ME))/);

PageInfoLookup["FailOSIE"] = new PageInfo("FailOSIE","Unknown","Unknown","Unknown");

</script>