Javascript 如何调用chrome.storage.sync.get并在页面加载时分配变量?

Javascript 如何调用chrome.storage.sync.get并在页面加载时分配变量?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个页面,如果设置为true,则应该只加载某一部分。这些设置可在存储器中找到 但是,在加载页面时,我无法检索这些设置。 我尝试了以下方法: var permission = true; chrome.storage.sync.get({ history: true }, function(items) { permission = items.history; }); 但是当页面加载时,权限将始终等于true。如果我调用另一个函数来打印权限值,则在之后才会调用该函数 我调

我有一个页面,如果设置为true,则应该只加载某一部分。这些设置可在存储器中找到

但是,在加载页面时,我无法检索这些设置。
我尝试了以下方法:

var permission = true;
chrome.storage.sync.get({ 
    history: true
}, function(items) {
    permission = items.history;
});
但是当页面加载时,权限将始终等于true。如果我调用另一个函数来打印权限值,则在之后才会调用该函数

我调用此函数以及使用

document.addEventListener('DOMContentLoaded', function () {

我认为问题在于没有及时调用该函数,但我不知道如何解决这个问题。

您的怀疑是正确的。从存储器中检索数据后的回调可能会在页面已加载后执行

为了解决这个问题,我建议使用:

使用
async/await
重写,但我们仍然需要提示回调:

async function getFromStorage(key) {
    return new Promise((resolve, reject) => {
        chrome.storage.sync.get(key, resolve);
    })
        .then(result => {
            if (key == null) return result;
            else return result[key];
        });
}

let permission = await getFromStorage("history");

为什么不更普遍地使用HTML5本地存储呢?您使用Chrome特定存储有什么原因吗?也就是说,您是否尝试过将权限设置为true的位置更改?例如,在全局范围内实例化空变量,但只有在满足特定条件(即DOM完成加载,或者可能存储“true”)时,才在函数内将其设置为true在存储中声明并使用该变量检查真实性。如果为true,则加载新页面。如果为true,则返回false。我可能尝试使用HTML5。我对这一点不熟悉,所以我只使用了我看到的第一个。我也尝试将其设置为全局变量,但问题在于该值直到太晚才更改。@Korgrue,但localstorage不同步。user3542347,有什么原因不能将其他函数放入存储回调中吗?javascript内存并不像您所经历的那样是持久性的。感谢HTML5为我们带来了本地和会话存储,允许您在不必查询数据库的情况下将键:值对传递到其他页面。在您的情况下,我将进行检查在第一个页面上,如果满足条件,则将sessionStorage key设置为true,当新页面加载查询该会话密钥时,如果为true,则更新必要的内容。@DanielHerr您是对的,但从我从用户3542347收集的信息来看,他只想存储会话变量,而Chromes存储是他/她的第一件事他尝试过。我不认为他/她正在尝试在计算机之间同步数据-只是将数据从一个页面传递到另一个页面。这样做与简单地将函数调用放入chrome.storage.sync.get函数中有什么主要区别吗?除了允许“拒绝”之外状态?如果变量被设置为全局变量并在其他地方调用,它将在页面加载时包含不同的值。你是对的,没有区别。也许对你的情况来说,调用chrome.storage.sync.get回调中的内容加载函数更好。你能澄清你所说的是哪一个变量吗?很抱歉,响应太晚了,我没有我只是希望我可以设置一个全局“permission”变量,该变量可以由多个函数检查,但似乎我只需要从回调中调用每个函数并传入权限,或者在每个函数中进行检查。无论如何,谢谢。这只是一个美观的东西,但您如何使用async/Wait重构它?
async function getFromStorage(key) {
    return new Promise((resolve, reject) => {
        chrome.storage.sync.get(key, resolve);
    })
        .then(result => {
            if (key == null) return result;
            else return result[key];
        });
}

let permission = await getFromStorage("history");