1/* 2** Detect the browser and version, and add as classes to the html el 3** This function is in a separate JS file so it can be loaded in the header before everything loads 4*/ 5 6var BrowserDetect = { 7 init: function () { 8 this.browser = this.searchString(this.dataBrowser) || "Other"; 9 this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "Unknown"; 10 }, 11 searchString: function (data) { 12 for (var i = 0; i < data.length; i++) { 13 var dataString = data[i].string; 14 this.versionSearchString = data[i].subString; 15 16 if (dataString.indexOf(data[i].subString) !== -1) { 17 return data[i].identity; 18 } 19 } 20 }, 21 searchVersion: function (dataString) { 22 var index = dataString.indexOf(this.versionSearchString); 23 if (index === -1) { 24 return; 25 } 26 27 var rv = dataString.indexOf("rv:"); 28 if (this.versionSearchString === "Trident" && rv !== -1) { 29 return parseFloat(dataString.substring(rv + 3)); 30 } else { 31 return parseFloat(dataString.substring(index + this.versionSearchString.length + 1)); 32 } 33 }, 34 35 dataBrowser: [ 36 {string: navigator.userAgent, subString: "Edge", identity: "MS Edge"}, 37 {string: navigator.userAgent, subString: "MSIE", identity: "Explorer"}, 38 {string: navigator.userAgent, subString: "Trident", identity: "Explorer"}, 39 {string: navigator.userAgent, subString: "Firefox", identity: "Firefox"}, 40 {string: navigator.userAgent, subString: "Opera", identity: "Opera"}, 41 {string: navigator.userAgent, subString: "OPR", identity: "Opera"}, 42 43 {string: navigator.userAgent, subString: "Chrome", identity: "Chrome"}, 44 {string: navigator.userAgent, subString: "Safari", identity: "Safari"} 45 ] 46}; 47 48BrowserDetect.init(); 49 50// Get the HTML element and add the classes to it 51var html = document.getElementsByTagName('html')[0]; 52html.classList.add('browser-' + BrowserDetect.browser); 53html.classList.add(BrowserDetect.browser + '-' + BrowserDetect.version);
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.