gpt4 book ai didi

javascript - Chrome 扩展 : store data on background

转载 作者:行者123 更新时间:2023-11-30 06:58:01 26 4
gpt4 key购买 nike

我希望能够在后台(在我的扩展程序上)存储数据,以便我可以在多个域之间访问这些数据。

我在做什么:

content-script.js

function setItem(name, data) {
chrome.extension.sendMessage({ command: 'setItem', name: name, data: data });
}

function getItem(name) {
chrome.extension.sendMessage({ command: 'getItem', name: name }, function(response) {
return response;
});
}

background-script.js

Storage.prototype.setObject = function(key, value) {
this.setItem(key, JSON.stringify(value));
}

Storage.prototype.getObject = function(key) {
var value = this.getItem(key);
return value && JSON.parse(value);
}

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
switch (request.command) {
case 'setItem':
localStorage.setObject(request.name, request.data);
return;
case 'getItem':
sendResponse(localStorage.getObject(request.name));
return;
}
});

但没有成功,因为我无法从 getItem 的回调内部返回。

我确实在 function(response) { } 回调中获取了数据,但我无法将其作为 getItem 的返回值返回。

我应该怎么做?

最佳答案

提出这个 2012 年的问题是为了获得最新的答案。那么……

现在正确的答案是使用 chrome.storage API .它是一个可供扩展页面和内容脚本访问的 API,并且它提供异步存储。它需要 "storage" 权限,但此权限不会生成警告。

// Setting
chrome.storage.local.set({key: data}, function() {
if(chrome.runtime.lastError) {
console.error(
"Error setting " + key + " to " + JSON.stringify(data) +
": " + chrome.runtime.lastError.message
);
}
});

// Getting
chrome.storage.local.get("key", function(data) {
// Do something with data.key
});

另见 Examples文档的一部分。

请注意,在任何一种情况下(这种方法,或后台消息传递方法),您都不能创建返回结果的函数 getData,因为调用是异步的。

一些提示和技巧:

  1. 通过将对象或数组作为查询传递,您可以一次设置或获取多个值。您可以通过传递 null 查询来读取所有值。

  2. 您可以为 get() 操作提供一个默认值,以防没有为键存储任何值,方法是传递一个类似 {key: defaultValue} 的查询

  3. 您可以通过 chrome.storage.onChanged 事件通知存储的所有更改。

  4. chrome.storage.local 遵守 "unlimitedStorage" 权限。

  5. 如果为扩展程序启用了 Chrome 同步,
  6. chrome.storage.sync 会将值传播到登录到同一 Google 帐户的所有配置文件。但是,保留 quotas记在心里。

  7. 如果您确实需要同步访问,您可以使用由 chrome.storage 支持的本地缓存来伪造它。但是,存在一些限制:在同步代码块中,您的缓存不会随着其他页面的更改而更新,您需要异步读取一次值以填充缓存。

关于javascript - Chrome 扩展 : store data on background,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11238883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com