pull/3/head
iotcat 5 years ago
parent 5d4e44e82f
commit bf1a9180e0
  1. 44
      demo.html
  2. 95
      fp.js

@ -1,11 +1,10 @@
<!doctype html>
<html>
<head>
<title>fp</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
body{
font-family: sans-serif;
max-width: 48em;
margin: auto;
@ -13,15 +12,12 @@
background: #222;
color: #fff;
}
h1 {
margin: 2em 0 0;
}
p {
font-size: 1.2em
}
button {
border: none;
color: #fff;
@ -32,58 +28,56 @@
box-shadow: 0 3px 0 #05c;
outline: none;
}
button:active {
transform: translateY(3px);
box-shadow: none;
}
strong {
display: block;
letter-spacing: 1px;
word-wrap: break-word;
}
@media (min-width: 32em) {
h1 {
font-size: 4em;
}
strong {
font-size: 1.5em;
}
}
</style>
</head>
<body>
<div id="container"></div>
<h1>fp</h1>
<p> <button type="button" id="btn">Your fp: <strong id="fp"></strong></button></p>
<p>Time Used: <var id="time"></var> ms &nbsp;Accuracy: <var id="acc"></var> %</p>
<p> <button type="button" id="btn">Your fp: <strong id="fp"></strong></button></p>
<p>Time Used: <var id="time"></var> ms &nbsp;Accuracy: <var id="acc"></var> %</p>
<p>Created Time: <var id="cTime"></var></p>
<p><strong>Detailed information: </strong></p>
<pre id="details"></pre>
<script src="fp.min.js"></script>
<script src="fp.js"></script>
<script>
document.querySelector("#btn").addEventListener("click", function () {
location.reload();
})
fp((f, acc, detail, CreateTime, TimeUsed, detailObj) => {
document.querySelector("#btn").addEventListener("click", function () {
location.reload();
})
fp('eyJfZnAiOiI1YjI4Y2U5ZCIsIl9mcF9yZWZfIjoiZVZiSmJVVjlWNGFzS0JZOE10THRZQmJVTkVkSkk5WUpJZElnYlJJUVpWY0lhZGJKZVFZNWI5TkVMRmJKWlZJZ09KZTlkMEwxWkZVZExOVUZJVWJOWkpJNVpvWkZhOVpVY0ZjSklCY0pZeEl4Y0pNQmJKYlJkeFlCYkJZQlk0YlViQlpoSUJaRllGWUZiY0xaY1JZQllRVHRRTlpsUmxkSlFkSUZiOVlZUUJRNVZGUUZRaFRWV0ZlTmRJWVZRVlpKYjVUQVprUmhOUmRFTkJNSmJvWmhaNVpKWmhaTmFvY0phTWN3VEpaSlpSVTlJWkxOWk1jeGJGY0JiRmExTEpUeFk1TE5MSlFsSVZPUU5ZTyIsIl9mcF9MYXN0Q2hhbmdlVGltZSI6IjE1NjE1MTkxNzYifQ==', (f, key, acc, detail, CreateTime, TimeUsed, detailObj)=>{
document.querySelector("#acc").textContent = String(acc * 100).substr(0, 6);
document.querySelector("#time").textContent = TimeUsed
document.querySelector("#fp").textContent = f
document.querySelector("#details").textContent = detail;
document.querySelector("#cTime").textContent = CreateTime;
console.log('fp_key: ' + key);
console.log(detailObj);
})
document.querySelector("#acc").textContent = String(acc * 100).substr(0, 6);
document.querySelector("#time").textContent = TimeUsed
document.querySelector("#fp").textContent = f
document.querySelector("#details").textContent = detail;
document.querySelector("#cTime").textContent = CreateTime;
console.log(detailObj);
})
</script>
</body>
</html>

95
fp.js

@ -42,7 +42,7 @@ var cookie = {
})('fp', this, function () {
'use strict'
var MaxDiff = 0.94;
var MaxDiff = 0.89;
var x64Add = function (m, n) {
m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff]
@ -1419,9 +1419,12 @@ var cookie = {
var _fp_LastChangeTime = null;
var _fp_TimeUsed = null;
var _fp_detailObj = {};
var _fp_key = null;
var _fp_ready = false;
var d1 = new Date();
Fingerprint2.get(function (components) {
var d1 = null;
function ini(components) {
var murmur = x64hash128(components.map(function (pair) { return pair.value }).join(), 15);
murmur = murmur.substr(0, 8);
var rate = 0;
@ -1458,7 +1461,7 @@ var cookie = {
}
console.log('\n' + ' %c fp v2.0.1 %c ' + _fp_val + '::' + String(_fp_acc * 100).substr(0, 4) + '%::' + _fp_TimeUsed + 'ms %c https://fp.yimian.xyz \n', 'color: #00FFFF; background: #030307; padding:5px 0;', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #4682B4; padding:5px 0;');
})
}
function Compress(strNormalString) {
var strCompressedString = "";
@ -1469,6 +1472,16 @@ var cookie = {
return strCompressedString;
}
function generateKey(){
var obj = {
_fp: cookie.get('_fp'),
_fp_ref_: cookie.get('_fp_ref_'),
_fp_LastChangeTime: cookie.get('_fp_LastChangeTime')
};
_fp_key = window.btoa(JSON.stringify(obj));
return _fp_key;
}
var levenshteinenator = (function () {
function levenshteinenator(a, b) {
@ -1503,13 +1516,81 @@ var cookie = {
return levenshteinenator;
}());
var fp = function (f) {
var key_check = function (key){
var obj;
try{
obj = JSON.parse(window.atob(key));
}catch(e){
return false;
}
if(obj._fp === undefined || obj._fp_ref_ === undefined || obj._fp_LastChangeTime === undefined){
return false;
}
return true;
}
var fp_link = function (key, f){
if(key != _fp_key && !_fp_ready && key_check(key)){
key = window.atob(key);
var obj = JSON.parse(key);
cookie.set('_fp', obj._fp);
cookie.set('_fp_ref_', obj._fp_ref_);
cookie.set('_fp_LastChangeTime', obj._fp_LastChangeTime);
fp_reset();
}
fp_get(f);
}
var fp_reset = function (){
d1 = new Date();
Fingerprint2.get(ini);
_fp_ready = true;
}
var fp_get = function (f) {
if (!_fp_val) {
setTimeout(fp, 1, f);
setTimeout(fp_get, 1, f);
return;
}
f(_fp_val, _fp_acc, _fp_detail, _fp_LastChangeTime, _fp_TimeUsed, _fp_detailObj);
f(_fp_val, generateKey(), _fp_acc, _fp_detail, _fp_LastChangeTime, _fp_TimeUsed, _fp_detailObj);
};
var fp = function (k, f){
if(typeof k === 'function'){
if(!_fp_ready) {
fp_reset();
}
fp_get(k);
return;
}
if(typeof k === 'string'){
if(f == undefined) f = function(){};
if(k == 'reset'){
cookie.del('_fp');
cookie.del('_fp_ref_');
cookie.del('_fp_LastChangeTime');
fp_reset();
fp_get(f);
return;
}else{
fp_link(k, f);
}
return;
}
}
return fp;
});
Loading…
Cancel
Save