0

我想从我的扩展中保存一些值(比如用户 ID),然后想在其他页面上访问它。我不能使用 cookie 来做到这一点,因为我只能在扩展中访问 c​​ookie。

有没有办法做到这一点?

4

1 回答 1

3

对不起,这可能只是我很厚,但我仍然不明白你在做什么。

如果您想创建跨不同域持续存在的变量,则需要使用 chrome.storage。它类似于 HTML5 localStorage,但有一些显着的改进(跨域持续存在是我的主要改进)。您可以在此处阅读有关设置和获取值的更多信息:

http://developer.chrome.com/extensions/storage.html

如果这不是您所需要的,请尝试给出您正在尝试做的具体示例,我会再试一次。

编辑:请参阅下面的示例。

您可以像这样将变量设置为存储(该函数是可选参数):

var storage = chrome.storage.local;
var myVal="foo";

storage.set({'myVar': myVal}, function() {
    alert('myVar has been saved in local storage');
});

您可以像这样检索它(功能不是可选的):

storage.get('myVar', function(items) {
    if (items.myVar) {
        alert(items.myVar);
    }
});

当 storage.get({'myVar': ''}) 未定义 'myVar' 时,您可以返回默认值 - 这样可以节省使用“if (items.myVar) {”行的检查。

编辑:请参阅下文以了解需要注意的问题。

首先,这些方法是异步的。所以...

alert("1");
storage.get('myVar', function(items) {
    alert("2");
});
alert("3");

可能会输出 1,然后是 3,然后是 2。如果你事先知道的话,这没什么大不了的,但可以在以后节省很多重组。

其次,请注意您拥有的存储空间量是有限制的。对于 chrome.storage.sync(变量在所有用户浏览器之间自动同步),存储空间非常有限,大约为 100kb。(还有其他限制,例如最多 512 个单独的变量 - 请参阅上面的文档链接)。基本上, chrome.storage.sync 仅适用于一些小变量。

chrome.storage.local 有更多的存储空间,大约 5mb(除非您设置了无限存储权限)。与 chrome.storage.sync 不同,存储 chrome.storage.local 没有其他限制。

如果一个集合会让你超过存储限制,那么它就会失败。

第三,使用变量作为变量名不起作用:

var myVal="foo";
var myVarName='myVar';

storage.set({myVarName: myVal}, function() {
    alert('THIS WILL NOT WORK');
});

如果像我一样,你真的想要/需要做这样的事情,做这样的事情的方法是创建一个对象并将变量作为属性分配给它,然后将对象放入存储中。例如:

var myVarName='myVar';
var mySecondVarName='mySecondVar';

var myVal="foo";
var mySecondVal="bar";

var obj = {};
obj[myVarName] = myVal;
obj[mySecondVarName] = mySecondVal;
//add as many vars as you want to save to the storage 
//(as long as you do not exceed the max storage space as mentioned above.)

storage.local.set(obj);

然后,您可以通过以下方式获取值:

chrome.storage.local.get(myVarName, function (items) {
    if (items[myVarName]) {
        alert('You got the value that was set to myVarName');
    }
});

或者,如果您想要 mySecondVarName 的值:

chrome.storage.local.get(mySecondVarName, function (items) {
    if (items[mySecondVarName]) {
        alert('You got the value that was set to mySecondVarName');
    }
});

这些可以嵌套。

于 2012-09-05T21:23:25.063 回答