1/** 2 * JavaScript Client Detection 3 * (C) viazenetti GmbH (Christian Ludwig) 4 */ 5(function (window) { 6 { 7 var unknown = '-'; 8 9 // screen 10 var screenSize = ''; 11 if (screen.width) { 12 width = (screen.width) ? screen.width : ''; 13 height = (screen.height) ? screen.height : ''; 14 screenSize += '' + width + " x " + height; 15 } 16 17 // browser 18 var nVer = navigator.appVersion; 19 var nAgt = navigator.userAgent; 20 var browser = navigator.appName; 21 var version = '' + parseFloat(navigator.appVersion); 22 var majorVersion = parseInt(navigator.appVersion, 10); 23 var nameOffset, verOffset, ix; 24 25 // Opera 26 if ((verOffset = nAgt.indexOf('Opera')) != -1) { 27 browser = 'Opera'; 28 version = nAgt.substring(verOffset + 6); 29 if ((verOffset = nAgt.indexOf('Version')) != -1) { 30 version = nAgt.substring(verOffset + 8); 31 } 32 } 33 // Opera Next 34 if ((verOffset = nAgt.indexOf('OPR')) != -1) { 35 browser = 'Opera'; 36 version = nAgt.substring(verOffset + 4); 37 } 38 // Legacy Edge 39 else if ((verOffset = nAgt.indexOf('Edge')) != -1) { 40 browser = 'Microsoft Legacy Edge'; 41 version = nAgt.substring(verOffset + 5); 42 } 43 // Edge (Chromium) 44 else if ((verOffset = nAgt.indexOf('Edg')) != -1) { 45 browser = 'Microsoft Edge'; 46 version = nAgt.substring(verOffset + 4); 47 } 48 // MSIE 49 else if ((verOffset = nAgt.indexOf('MSIE')) != -1) { 50 browser = 'Microsoft Internet Explorer'; 51 version = nAgt.substring(verOffset + 5); 52 } 53 // Chrome 54 else if ((verOffset = nAgt.indexOf('Chrome')) != -1) { 55 browser = 'Chrome'; 56 version = nAgt.substring(verOffset + 7); 57 } 58 // Safari 59 else if ((verOffset = nAgt.indexOf('Safari')) != -1) { 60 browser = 'Safari'; 61 version = nAgt.substring(verOffset + 7); 62 if ((verOffset = nAgt.indexOf('Version')) != -1) { 63 version = nAgt.substring(verOffset + 8); 64 } 65 } 66 // Firefox 67 else if ((verOffset = nAgt.indexOf('Firefox')) != -1) { 68 browser = 'Firefox'; 69 version = nAgt.substring(verOffset + 8); 70 } 71 // MSIE 11+ 72 else if (nAgt.indexOf('Trident/') != -1) { 73 browser = 'Microsoft Internet Explorer'; 74 version = nAgt.substring(nAgt.indexOf('rv:') + 3); 75 } 76 // Other browsers 77 else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { 78 browser = nAgt.substring(nameOffset, verOffset); 79 version = nAgt.substring(verOffset + 1); 80 if (browser.toLowerCase() == browser.toUpperCase()) { 81 browser = navigator.appName; 82 } 83 } 84 // trim the version string 85 if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix); 86 if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix); 87 if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix); 88 89 majorVersion = parseInt('' + version, 10); 90 if (isNaN(majorVersion)) { 91 version = '' + parseFloat(navigator.appVersion); 92 majorVersion = parseInt(navigator.appVersion, 10); 93 } 94 95 // mobile version 96 var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer); 97 98 // cookie 99 var cookieEnabled = (navigator.cookieEnabled) ? true : false; 100 101 if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) { 102 document.cookie = 'testcookie'; 103 cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false; 104 } 105 106 // system 107 var os = unknown; 108 var clientStrings = [ 109 {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/}, 110 {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/}, 111 {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/}, 112 {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/}, 113 {s:'Windows Vista', r:/Windows NT 6.0/}, 114 {s:'Windows Server 2003', r:/Windows NT 5.2/},
115 {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/}, 116 {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/}, 117 {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/}, 118 {s:'Windows 98', r:/(Windows 98|Win98)/}, 119 {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/}, 120 {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/}, 121 {s:'Windows CE', r:/Windows CE/}, 122 {s:'Windows 3.11', r:/Win16/}, 123 {s:'Android', r:/Android/}, 124 {s:'Open BSD', r:/OpenBSD/}, 125 {s:'Sun OS', r:/SunOS/}, 126 {s:'Chrome OS', r:/CrOS/}, 127 {s:'Linux', r:/(Linux|X11(?!.*CrOS))/}, 128 {s:'iOS', r:/(iPhone|iPad|iPod)/}, 129 {s:'Mac OS X', r:/Mac OS X/}, 130 {s:'Mac OS', r:/(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)/}, 131 {s:'QNX', r:/QNX/}, 132 {s:'UNIX', r:/UNIX/}, 133 {s:'BeOS', r:/BeOS/}, 134 {s:'OS/2', r:/OS\/2/}, 135 {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/} 136 ]; 137 for (var id in clientStrings) { 138 var cs = clientStrings[id]; 139 if (cs.r.test(nAgt)) { 140 os = cs.s; 141 break; 142 } 143 } 144 145 var osVersion = unknown; 146 147 if (/Windows/.test(os)) { 148 osVersion = /Windows (.*)/.exec(os)[1]; 149 os = 'Windows'; 150 } 151 152 switch (os) { 153 case 'Mac OS': 154 case 'Mac OS X': 155 case 'Android': 156 osVersion = /(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([\.\_\d]+)/.exec(nAgt)[1]; 157 break; 158 159 case 'iOS': 160 osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer); 161 osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0); 162 break; 163 } 164 165 // flash (you'll need to include swfobject) 166 /* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */ 167 var flashVersion = 'no check'; 168 if (typeof swfobject != 'undefined') { 169 var fv = swfobject.getFlashPlayerVersion(); 170 if (fv.major > 0) { 171 flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release; 172 } 173 else { 174 flashVersion = unknown; 175 } 176 } 177 } 178 179 window.jscd = { 180 screen: screenSize, 181 browser: browser, 182 browserVersion: version, 183 browserMajorVersion: majorVersion, 184 mobile: mobile, 185 os: os, 186 osVersion: osVersion, 187 cookies: cookieEnabled, 188 flashVersion: flashVersion 189 }; 190}(this)); 191 192/* 193alert( 194 'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' + 195 'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion + 196 ' (' + jscd.browserVersion + ')\n' + 197 'Mobile: ' + jscd.mobile + '\n' + 198 'Flash: ' + jscd.flashVersion + '\n' + 199 'Cookies: ' + jscd.cookies + '\n' + 200 'Screen Size: ' + jscd.screen + '\n\n' + 201 'Full User Agent: ' + navigator.userAgent 202); 203*/
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.