Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量传递给chrome.storage.sync.get()_Javascript_Google Chrome Extension - Fatal编程技术网

Javascript 如何将变量传递给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()函数

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