如何将指纹识别结果存储在变量中?

5
我正在尝试将fingerprint2的结果存储在一个变量中。
var info = {};
new Fingerprint2().get(function(result, components){
  info.fingerprint = result;
});
alert(info.fingerprint);

但是它不起作用。是否有更好的方法,像:

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

或者有一些更加高级的方法吗?
编辑: 现代化且灵活的浏览器指纹库,是原始fingerprintjs的继任者。 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
});
1个回答

10

你的代码没有按照预期运行,因为Fingerprint2().get(...)是异步的。这意味着alert(info.fingerprint)将在传递给get函数的回调函数完成之前运行。如果你不理解异步概念的原因,请查看演示页面。你会发现它显示了计算指纹所需的时间。在调用get和计算完成之间,你的alert会被执行,因此无法知道指纹是什么。

唯一能保证你拥有指纹的时间是在回调函数中。

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);
}

1
alert()是我的代码中的示例,我想将其存储在变量中并在我的JavaScript代码中使用。如何安全地将其存储在变量中? - محمد علی پور فتحکوهی
1
同样的规则适用 - 在变量中使用它是可以的,但必须在 get 函数内部运行之后。请参考顶部的示例 - 可以在 afterFingerprintIsCalculated 中安全地读取 info 变量 - 因此,您可以将需要从其中读取的代码放在那里。 - iblamefish
1
有没有一种方法可以在函数外部存储并使用它?我的代码不应该在该函数中运行,因为我有一些其他变量。@iblamefish - Mohammad Alipour
1
能否将fingerprint2的结果存储在变量中并在任何地方使用?@iblamefish - Mohammad Alipour
1
@MohammadAlipour 是的,只要“到处”指的是回调函数内部(或任何其他它所调用的函数内部)。无论如何都无法避免这是异步代码 - iblamefish
演示链接已损坏。 - buycanna.io

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接