HTML5本地存储,如何传递变量?

时间:2011-04-04 23:17:50

标签: html5 google-chrome-extension local-storage

好的,这是我的问题。我正在编写一个Chrome扩展程序,它已经差不多完成了,但问题是,例如:

[Page popup.html]

localStorage["code"] = "alert('Hello!');";

[File injection.js;每次加载页面时都会调用,我认为是内容脚本]

localStorage["code"] = (localStorage["code"] != undefined) ? localStorage["code"] : "alert('Default!');";
eval(localStorage["code"]);

我尝试了2种方法,第一种方法是不打开POP UP,这样我加载的每一页都会运行命令alert(“Default!”);它的工作原理。然后我尝试首先加载弹出窗口,我意识到变量localStorage["code"]现在已经到了我加载的页面,而不是我的扩展。在我的扩展程序中,localStorage["code"] == "alert('Hello');";但在http://google.com localStorage["code"] == "";http://facebook.com localStorage["code"] == "";内快速解释。

我的问题是,无论如何存在来自popup.html的localStorage [“code”],inject.js可以访问吗?

2 个答案:

答案 0 :(得分:3)

三种是2种本地存储 - 一种属于扩展本身(只能从后台页面,弹出页面或捆绑到扩展包中的任何页面访问),另一种属于该站点(只能从一个站点访问)内容脚本)。

因此,如果您需要访问内容脚本中弹出窗口中设置的本地存储值,则需要向后台页面发送请求,读取其中的值,然后将其发送回内容脚本。如何做到这一点在Message Passing doc。

中有解释

答案 1 :(得分:1)

检查出来:

内容脚本:

chrome.extension.sendRequest({ action : "getCode" }, function(response) {
    alert(response.getCode);
}); 

背景页面:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) 
{   
    case "getCode":
        sendResponse({ getCode: localStorage['code'] });
    break;
}