【问题标题】:How to store fingerprint2 result in a var如何将指纹2结果存储在var中
【发布时间】:2019-06-27 16:11:59
【问题描述】:

我正在尝试将指纹 2 结果存储在 var 中。

var info = {};
new Fingerprint2().get(function(result, components){
  info.fingerprint = result;
});
alert(info.fingerprint);

但不工作 有没有更好的方法:

var fp = new Fingerprint2().get();

或者一些增强的方法?

编辑: 现代灵活的浏览器指纹库,继承了原始指纹库http://valve.github.io/fingerprintjs2/

用法:

new Fingerprint2().get(function(result, components){
  console.log(result); //a hash, representing your device fingerprint
  console.log(components); // an array of FP components
});

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的代码没有按预期工作,因为Fingerprint2().get(...) 是异步的 - 这意味着alert(info.fingerprint) 将在传递给get 的回调函数完成之前运行

    如果您不了解异步性的概念,要了解为什么这是必要的,请查看demo page。您会看到它说明计算指纹需要多长时间。你 alert 将在调用 get 和计算出来之间运行,因此无法知道指纹是什么。

    您可以保证您拥有指纹的唯一时间是在回调函数期间。

    var info = {};
    
    new Fingerprint2().get(function(result, components) {
        info.fingerprint = result;
    
        afterFingerprintIsCalculated();
    });
    
    function afterFingerprintIsCalculated() {
        alert(info.fingerprint);
    }
    
    
    
    // BETTER (no global state)
    new Fingerprint2().get(function(result, components) {
        var info = {
            fingerprint: result
        };
    
        processFingerprint(info);
    });
    
    function processFingerprint(data) {
        alert(data.fingerprint);
    }
    

    【讨论】:

    • alert() 是我的代码中的示例,我想将它存储在 var 中并在我的 javascript 代码中使用它。如何将其存储在 var secure
    • 同样的规则适用 - 可以在变量中使用它,但只有在 get 中的函数运行之后。请参阅上面的示例 - 从 afterFingerprintIsCalculated 中的 info 变量中读取是安全的 - 因此您可以将需要从中读取的代码放在那里。
    • 有没有办法存储它并使用外部功能?我的代码不应该在该函数中运行,因为我有一些其他变量 @iblamefish
    • 是否可以将指纹2结果存储在一个变量中并在任何地方使用它?@iblamefish
    • @MohammadAlipour 是的,只要“无处不在”是指在回调函数(或它随后调用的任何其他函数)内。 没有办法绕过这个异步代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多