好的,这是我的问题。我正在编写一个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可以访问吗?
答案 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;
}