Javascript 如何将变量传递给chrome.storage.sync.get()
我想将值传递给chrome.storage.sync.get()函数Javascript 如何将变量传递给chrome.storage.sync.get(),javascript,google-chrome-extension,Javascript,Google Chrome Extension,我想将值传递给chrome.storage.sync.get()函数 chrome.storage.sync.get('privateKey', function(data, e) { if (data.privateKey) { var decrypt = new JSEncrypt(); decrypt.setPrivateKey(data.privateKey); var uncrypted = decrypt.decrypt(e.detail.encrypte
chrome.storage.sync.get('privateKey', function(data, e) {
if (data.privateKey) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(data.privateKey);
var uncrypted = decrypt.decrypt(e.detail.encryptedVal)
alert(uncrypted);
} else {
alert("key is not set");
}
});
但是e.detail.encryptedVal显示我是未定义的。因此,从下面的注释中,我想您应该将该值传递给
get
回调,以便在回调中使用它。不幸的是,这不能按您希望的方式完成。但是,您可以编写一个decrypt
函数,将encryptedVal
作为参数,并简单地使用它
function decrypt(encryptedVal) {
chrome.storage.sync.get('privateKey', function (data) {
if (data.privateKey) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(data.privateKey);
var uncrypted = decrypt.decrypt(encryptedVal)
alert(uncrypted);
} else {
alert("key is not set");
}
});
}
请注意,此函数使用异步代码,您可能不会像预期的那样从中返回
因此,从下面的注释中,我想您希望将该值传递给get
callback,以便在回调中使用它。不幸的是,这不能按您希望的方式完成。但是,您可以编写一个decrypt
函数,将encryptedVal
作为参数,并简单地使用它
function decrypt(encryptedVal) {
chrome.storage.sync.get('privateKey', function (data) {
if (data.privateKey) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(data.privateKey);
var uncrypted = decrypt.decrypt(encryptedVal)
alert(uncrypted);
} else {
alert("key is not set");
}
});
}
请注意,此函数使用异步代码,您可能不会像预期的那样从中返回 调用.get()
通过传递带有2个参数的函数(即函数(数据,e){…}
),可以执行以下操作:
使用一个参数调用该函数。它被分配给回调局部变量data
第二个参数保持未定义状态。它被分配给回调局部变量e
如果外部作用域中存在变量e
,则无法再访问该变量
我想第三部分正是你的问题。在调用.get()
的作用域中有一个变量e
,但使其无法访问
通常,由于调用的概念,实际上不需要在作用域内传递e
——只需使用外部作用域中的变量,它将保留在内存中,直到函数执行为止。如果有意义的话,可以将其视为“局部-全局”变量。如果没有,就有
考虑到这一点:
chrome.storage.sync.get('privateKey', function(data) { // just don't mention e here
/* ... */
// Just use e inside if it comes from outer scope
var uncrypted = decrypt.decrypt(e.detail.encryptedVal);
/* ... */
});
更好的是,让我们将其转化为一个函数:
function decryptValue(value, callback) {
chrome.storage.sync.get('privateKey', function(data) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(data.privateKey);
var decrypted = decrypt.decrypt(value);
callback(decrypted);
}
}
/* ... */
decryptValue(e.detail.encryptedVal, function(decrypted) {
// Do something
});
/* ... */
请注意,回调
变量?虽然您可以在.get()
的回调内部使用解密的,但由于它是异步的,因此您不能在外部使用它。有一个,和。基本上,.get()
是异步的,因此必须使用回调
/* ... */
decryptValue(e.detail.encryptedVal, function(decrypted) {
// Do something with decrypted
});
// Here, decrypted is not yet computed
/* ... */
大多数ChromeAPI是异步的。我建议您阅读这个主题。调用.get()
通过传递带有2个参数的函数(即函数(数据,e){…}
),可以执行以下操作:
使用一个参数调用该函数。它被分配给回调局部变量data
第二个参数保持未定义状态。它被分配给回调局部变量e
如果外部作用域中存在变量e
,则无法再访问该变量
我想第三部分正是你的问题。在调用.get()
的作用域中有一个变量e
,但使其无法访问
通常,由于调用的概念,实际上不需要在作用域内传递e
——只需使用外部作用域中的变量,它将保留在内存中,直到函数执行为止。如果有意义的话,可以将其视为“局部-全局”变量。如果没有,就有
考虑到这一点:
chrome.storage.sync.get('privateKey', function(data) { // just don't mention e here
/* ... */
// Just use e inside if it comes from outer scope
var uncrypted = decrypt.decrypt(e.detail.encryptedVal);
/* ... */
});
更好的是,让我们将其转化为一个函数:
function decryptValue(value, callback) {
chrome.storage.sync.get('privateKey', function(data) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(data.privateKey);
var decrypted = decrypt.decrypt(value);
callback(decrypted);
}
}
/* ... */
decryptValue(e.detail.encryptedVal, function(decrypted) {
// Do something
});
/* ... */
请注意,回调
变量?虽然您可以在.get()
的回调内部使用解密的,但由于它是异步的,因此您不能在外部使用它。有一个,和。基本上,.get()
是异步的,因此必须使用回调
/* ... */
decryptValue(e.detail.encryptedVal, function(decrypted) {
// Do something with decrypted
});
// Here, decrypted is not yet computed
/* ... */
大多数ChromeAPI是异步的。我建议你读一下这个话题。我不理解你的问题get
回调应该只有一个参数(data
)并在其中存储检索对象。你希望它做什么?因为对于解密,我也需要它使用私钥加密的值,虽然我也分离了获取同步存储值的逻辑,但它什么也不返回。所以让我直截了当地说:你希望你能通过e
到get
回调来解密值吗?是的,如果你有任何其他解决方案,请建议我是js新手。写一个深入的答案。我不理解你的问题get
回调应该只有一个参数(data
)并在其中存储检索对象。你希望它做什么?因为对于解密,我也需要它使用私钥加密的值,虽然我也分离了获取同步存储值的逻辑,但它什么也不返回。所以让我直截了当地说:你希望你能通过e
到get
回调来解密值吗?是的,如果你有任何其他的解决方案,请建议我是js新手。写一个深入的答案。好吧,忍者秒。谢谢你的答案对我有用,但我只有一个问题文档。addEventListener(“encrypt”,function(e){var encryptedVal=e.detail.encryptedVal;console.info(“加密值是:”,e.detail.encryptedVal);decrypt(encryptedVal);});没有console.info值是无法解密函数的。很好,忍者已经过了几秒钟。谢谢你的答案对我有效,但我只有一个问题文档。addEventListener(“encrypt”,function(e){var encryptedVal=e.detail.encryptedVal;console.info(“加密值是:”,e.detail.encryptedVal);解密(encryptedVal);});没有console.info值是无法解密函数的。谢谢你的答案对我有用,但我只有一个问题文档。addEventListener(“encrypt”,function(e){var encryptedVal=e.detail.encryptedVal;console.info(“加密值为:”,e.detail.encryptedVal);解密(enc