当前位置: 首页 > 知识库问答 >
问题:

如何调用Chrome.Storage.Sync.Get并在页面加载时分配变量?[副本]

上官羽
2023-03-14

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

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

var permission = true;
chrome.storage.sync.get({ 
    history: true
}, function(items) {
    permission = items.history;
});

但当页面加载时,权限将始终等于true。如果我把一个调用放到另一个函数以打印权限的值,这将不会被调用,直到之后。

我调用这个函数以及加载页面各部分的函数,使用

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

我认为问题是函数没有被及时调用,但我不知道如何解决这一点。

共有1个答案

鲜于海
2023-03-14

你的怀疑是对的。从存储中检索数据后的回调可能会在页面加载后执行。

要解决这个问题,我建议使用Promise:

var p = new Promise(function (resolve, reject) {
    var permission = true;
    chrome.storage.sync.get({
        history: true
    }, function (items) {
        permission = items.history;
        resolve(permission);
    });
});
p.then(function (permission) {
    loadStuff(permission);
});

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");
 类似资料:
  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此不需要调用任何东西,只需在页面加载时继续使用servlet即可。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用之前声明的会话变量将所有信息(如登录名、密码等)打印到表中

  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此它不需要调用任何东西,只需在页面加载时继续使用servlet。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用先前声明的会话变量将所有信息(如登录名、密码等)打印到表中。

  • 问题内容: 传统上,要在页面加载后调用JavaScript函数,您需要在包含一些JavaScript的正文中添加一个属性(通常只调用一个函数) 页面加载后,我想运行一些JavaScript代码以使用服务器中的数据动态填充页面的某些部分。因为我使用的是JSP片段,所以我无法使用该属性,而JSP片段没有可以添加属性的元素。 还有其他方法可以在加载时调用JavaScript函数吗?我宁愿不使用jQuer

  • 这是我目前所拥有的,但它不起作用。如何连接所有内容?我认为问题在于逗号。

  • 问题内容: 我有一个通过AJAX函数分配的变量。当我做作业时… 在发送之前响应返回给了我一个回音,如何添加回调以防止这种情况发生? 编辑:我要问的澄清。 它仍然返回未定义。我用send send函数在onreadystatechange函数上为变量分配变量,但是当我的代码正在执行时.. send()可以返回之前,response返回未定义状态。如何停止响应下的代码继续运行,直到分配了响应后才发送值

  • 问题内容: 我正在尝试捕获表单的“提交”按钮,如果表单已提交,页面将刷新,并显示一些隐藏的字段。我想捕获表单是否已经提交过,以及是否在重新加载时提交,我想取消隐藏隐藏字段。我试图使用全局变量来实现此目的,但是我无法使其正常运行。 这是我尝试过的: 关于此代码有什么问题的任何建议? 问题答案: 由于HTTP是无状态的,因此每次加载页面时,它将使用JavaScript中设置的初始值。您不能在JS中设置