我编写了一个Chrome扩展程序,为某些输入元素添加了char计数器。没有用户界面,如果用户在特定页面上,它只会注入字符计数代码。
输入中应出现多少个字符数有限制。我最初编写它只显示字符数,但后来我觉得如果用户可以选择查看它们剩下多少个字符会很好。所以我决定创建一个选项页面。
在我的选项页面的某个时刻,我这样做:
localStorage["count"] = count; // count is the string "countUp" or "countDown"
事实证明我无法从contentscript.js访问options.html的localStorage所以我不情愿地创建了一个background.html页面,它监听来自contentscript的请求并返回内容脚本要求的localStorage值。
在内容中(简化)
var countOption;
chrome.extension.sendRequest(
{method: "localStorage", key: "count"},
function(response){
countOption = response.data;
console.log(countOption); // returns "countUp"
}
);
console.log(countOption); // returns undefined
if(countOption === "countUp") {
doSomething();
} else {
doSomethingElse();
}
背景页
<script type="text/javascript">
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
if(request.method === "localStorage") {
sendResponse({data: localStorage[request.key]});
} else {
sendResponse({});
}
}
);
</script>
问题是我无法为countOption
分配值,以便可以在我的其余脚本范围内访问它。当我在chrome.extension.sendRequest
的响应this
中分配它时,是窗口对象,所以我尝试全局声明countOption
,但在我的其余脚本中它仍然是undefined
。
谁能看到我哪里出错了?感谢。
答案 0 :(得分:2)
这样的事情会起作用吗?
function executeCount(countOption)
{
console.log(countOption); // returns undefined
if(countOption === "countUp") {
doSomething();
} else {
doSomethingElse();
}
}
chrome.extension.sendRequest(
{method: "localStorage", key: "count"},
function(response){
executeCount(response.data);
}
);