Skip to content

Instantly share code, notes, and snippets.

@mousemke
Created November 11, 2016 13:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mousemke/b38bf8891f8721128147ae345755f23e to your computer and use it in GitHub Desktop.
Save mousemke/b38bf8891f8721128147ae345755f23e to your computer and use it in GitHub Desktop.
generates a browser id string
/**
* 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