Chrome 扩展程序 - 本地存储不起作用
我正在编写一个 Chrome 扩展程序,它使用内容脚本来修改网站的某些部分。内容脚本工作正常,直到我尝试向我的扩展添加选项页面。
现在,我正在使用 options.html 文件将用户首选项保存到本地存储,如您在此处看到的:
<html>
<head><title>Options</title></head>
<script type="text/javascript">
function save_options() {
var select = document.getElementById("width");
var width = select.children[select.selectedIndex].value;
localStorage["site_width"] = width;
}
function restore_options() {
var fwidth = localStorage["site_width"];
if (!fwidth) {
return;
}
var select = document.getElementById("width");
for (var i = 0; i < select.children.length; i++) {
var child = select.children[i];
if (child.value == fwidth) {
child.selected = "true";
break;
}
}
}
</script>
<body onload="restore_options()">
Width:
<select id="width">
<option value="100%">100%</option>
<option value="90%">90%</option>
<option value="80%">80%</option>
<option value="70%">70%</option>
</select>
<br>
<button onclick="save_options()">Save</button>
</body>
</html>
我还有一个 background.html 文件来处理内容脚本和本地存储之间的通信:
<html>
<script type="text/javascript">
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "siteWidth")
sendResponse({status: localStorage["site_width"]});
else
sendResponse({});
});
</script>
</html>
然后是实际的内容脚本看起来像这样:
var Width;
chrome.extension.sendRequest({method: "siteWidth"}, function(response) {
width = response.status;
});
这些代码实际上都不起作用。对我来说它看起来足够可靠,但我不是一个非常有经验的程序员,所以我可能是错的。
有人可以用通俗易懂的方式向我解释本地存储吗?
I'm writing a Chrome extension that uses a content script to modify certain parts of a website. The content script worked fine until I tried to add an options page to my extension.
Right now I'm using an options.html file to save user preferences to localstorage, as you can see here:
<html>
<head><title>Options</title></head>
<script type="text/javascript">
function save_options() {
var select = document.getElementById("width");
var width = select.children[select.selectedIndex].value;
localStorage["site_width"] = width;
}
function restore_options() {
var fwidth = localStorage["site_width"];
if (!fwidth) {
return;
}
var select = document.getElementById("width");
for (var i = 0; i < select.children.length; i++) {
var child = select.children[i];
if (child.value == fwidth) {
child.selected = "true";
break;
}
}
}
</script>
<body onload="restore_options()">
Width:
<select id="width">
<option value="100%">100%</option>
<option value="90%">90%</option>
<option value="80%">80%</option>
<option value="70%">70%</option>
</select>
<br>
<button onclick="save_options()">Save</button>
</body>
</html>
I also have a background.html file to handle the communication between the content script and the localstorage:
<html>
<script type="text/javascript">
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "siteWidth")
sendResponse({status: localStorage["site_width"]});
else
sendResponse({});
});
</script>
</html>
Then there's the actual content script that looks like this:
var Width;
chrome.extension.sendRequest({method: "siteWidth"}, function(response) {
width = response.status;
});
None of that code actually works. It looks solid enough to me but I'm not a very experienced programmer so I might be wrong.
Could someone explain localstorage to me in layman's terms?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
window.localStorage
具有需要使用的 getter 和 setter 来访问内部对象映射。因此,要设置:
要获取:
要清除地图:
要删除项目:
要获取长度:
要基于内部地图中的索引键入:
要阅读更多信息: http://dev.w3.org/html5/webstorage/#the-storage-interface
window.localStorage
实现Storage
接口:The
window.localStorage
has getters and setters that need to be used in order to access the internal object map.So, to set:
To get:
To clear map:
To remove item:
To get length:
To key based on index in internal map:
To read more: http://dev.w3.org/html5/webstorage/#the-storage-interface
The
window.localStorage
implements theStorage
interface:要详细了解 localStorage 的工作原理 有关 LocalStorage 的完整详细信息 是您入门的一个很好的来源。只是补充一下,我会给你一个可能对你有帮助的例子。这是options.html
要访问它,您需要有一个 background.html 页面,如下所示。
如果您想从内容脚本访问 localStorage,则无法通过上述方法直接访问它。您需要使用称为消息传递的概念 (http://code.google.com/chrome /extensions/messaging.html),它可以将值从后台传递到内容脚本。正如谢尔盖所说,这可能是打字错误的问题。
To learn how localStorage works and in detail Complete details about LocalStorage is a good source for you to begin with. Just to add I will give you an example which might help you. This is the options.html
To access this you need to have a background.html page which can be as shown below.
If you want to access the localStorage from the Content Script you can't directly access it by the above method. You need to use the concept called Message Passing (http://code.google.com/chrome/extensions/messaging.html) which can pass the values from the background to content scripts. Just as Sergey said this might be an issue with the typo.
使用访问器不是强制性的,可以随意使用 [] 运算符来获取和设置值,并使用“in”运算符来测试键是否存在。
但是,您的内容脚本中似乎存在拼写错误:
由于 JavaScript 区分大小写,因此这两个是不同的变量。
Using accessors isn’t mandatory, feel free to use [] operator to get and set values, and “in” operator to test if key exists.
However, it looks like there’s a typo in your content script:
Since JavaScript is case-sensitive, these two are different variables.
尝试使用
window.localStorage.getItem/setItem
而不是localStorage["site_width"]
try using
window.localStorage.getItem/setItem
instead oflocalStorage["site_width"]