Created
November 11, 2016 13:24
-
-
Save mousemke/b38bf8891f8721128147ae345755f23e to your computer and use it in GitHub Desktop.
generates a browser id string
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Generate a browser fingerprint | |
* | |
**/ | |
browserId : function() | |
{ | |
var browserId = {}; | |
if ( !!window.chrome && !( !!window.opera ) ) | |
{ | |
if ( !!window.chrome && !!window.chrome.webstore ) | |
{ | |
browserId = { f: 'chrome', v: 'Chrome 14+' }; // Chrome 14+ | |
} | |
browserId = { f: 'chrome', v: 'Chrome 13- Android 4.0.4' }; // Chrome 13- Opera 14+ Android 4.0.4 | |
} | |
else if ( !!window.sidebar ) | |
{ | |
if ( !!window.globalStorage ) | |
{ | |
if ( (function x(){})[-6]==='x' ) | |
{ | |
browserId = { f: 'firefox', v: 'Firefox 2' }; // firefox 2 | |
} | |
else if ( (function x(){})[-5]=='x' ) | |
{ | |
browserId = { f: 'firefox', v: 'Firefox 3' }; // firefox 3 | |
} | |
browserId = { f: 'firefox', v: 'Firefox 2-13' }; // firefox 2-13 | |
} | |
browserId = { f: 'firefox', v: 'Firefox 14+' }; // Firefox 14+ | |
} | |
else if ( document.all && window.XMLHttpRequest ) | |
{ | |
if ( document.all && document.querySelector ) | |
{ | |
if ( document.all && document.addEventListener ) | |
{ | |
if ( document.all && window.atob ) | |
{ | |
browserId = { f: 'ie', v: 'IE 10' }; // IE 10 | |
} | |
browserId = { f: 'ie', v: 'IE 9' }; // IE 9 | |
} | |
browserId = { f: 'ie', v: 'IE 8' }; // IE 8 | |
} | |
browserId = { f: 'ie', v: 'IE 7' }; // IE 7 | |
} | |
else if ( '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style ) | |
{ | |
browserId = { f: 'ie', v: 'IE 11' }; // IE 11 | |
} | |
else if ( !!window.opera || /opera|opr/i.test(navigator.userAgent ) ) | |
{ | |
if ( !!window.chrome ) | |
{ | |
browserId = { f: 'opera', v: 'opera 14+' }; // opera 14+ | |
} | |
else if ( !!window.opera ) | |
{ | |
browserId = { f: 'opera', v: 'opera 12-' }; // opera 12- | |
} | |
browserId = { f: 'opera', v: 'opera 13' }; // opera 13 | |
} | |
else if ( Object.prototype.toString.call(window.operamini) === '[object OperaMini]' ) | |
{ | |
browserId = { f: 'opera', v: 'Opera Mini' }; // Opera Mini | |
} | |
else if ( /constructor/i.test(window.HTMLElement) ) | |
{ | |
if ( 'WebkitAppearance' in document.documentElement.style ) | |
{ | |
if ( /a/.__proto__=='//' ) | |
{ | |
browserId = { f: 'safari', v: 'Safari 4-5' }; // Safari 4-5 | |
} | |
else if ( !!navigator.userAgent.match(/safari/i) && !navigator.userAgent.match(/chrome/i) && !window.chrome ) | |
{ | |
browserId = { f: 'safari', v: 'Safari 6+' }; // Safari 6+ | |
} | |
browserId = { f: 'safari', v: 'Safari 3' }; // Safari 3 | |
} | |
browserId = { f: 'safari', v: 'Safari 2-' }; // Safari 2- | |
} | |
else | |
{ | |
browserId = { f: 'unknown', v: 'unknown' }; | |
} | |
var browserIdString = navigator.appName + // prob. Netscape | |
navigator.appCodeName + // prob. returns Mozilla | |
navigator.appVersion + // UA string | |
navigator.userAgent + // UA string | |
navigator.product + // engine | |
navigator.productSub + // engine version | |
window.navigator.vendor + // browser vendor | |
navigator.cookieEnabled + // cookies enabled | |
navigator.doNotTrack; // do not track setting | |
// if not unidentified | |
// document.cookie // cookie | |
for ( plugin in navigator.plugins ) // object - plugin list | |
{ | |
var p = navigator.plugins[ plugin ]; | |
for ( property in p ) | |
{ | |
var pro = p[ property ]; | |
if ( ( typeof pro === 'string' ) || ( typeof pro === 'number' ) ) | |
{ | |
browserIdString += plugin[ property ]; | |
} | |
else if ( typeof pro === 'object' ) | |
{ | |
for ( subPro in pro ) | |
{ | |
if ( typeof pro[ subPro ] === 'string' ) | |
{ | |
browserIdString += pro[ subPro ]; | |
} | |
// ignores objects and functions | |
} | |
} | |
// ignores functions | |
} | |
} | |
browserId.browserIdString = browserIdString; | |
fingerprint.vars.browser = browserId; | |
return browserIdString; | |
}, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment