访问其他页面上的扩展数据

时间:2012-09-05 15:33:44

标签: google-chrome-extension

我想从我的扩展程序中保存一些值(比如userid),然后想要在其他页面上访问它。我无法使用cookie,因为我只能在扩展程序中访问cookie。

有办法吗?

1 个答案:

答案 0 :(得分: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');
    }
});

这些可以嵌套。