我正在为Google Chrome制作内容脚本扩展程序,它会为网站的页面添加功能。我想添加几个选项,真的不大,我只需要两个字符串(其中没有一个是敏感的用户数据)。
从this answer开始,我认为我需要一个背景页面,我不想添加到我的扩展程序中 - 我不希望它增加不必要的重量。
我真的需要一个背景页面,或者我可以有一个没有它的选项页面(我可以使用哪个存储空间)?
答案 0 :(得分:2)
<强>更新强>
从Chrome 20开始,您现在可以使用Storage api .....
http://code.google.com/chrome/extensions/storage.html
旧方式
我所做的是创建一个指向我的扩展中的页面的iframe,该页面具有从本地存储获取我需要的设置的脚本,然后在内容脚本获得的消息中将其发送到其父级.....这是一个垃圾解释,代码说它更好;).......
内容脚本
// create the iframe for our page that sends the settings
var el = document.createElement("iframe");
el.setAttribute('src', chrome.extension.getURL("gimmeSettings.html"));
el.style.visibility="hidden";
document.body.appendChild(el);
// create the listner that listens for a message from our page that sends the settings
window.addEventListener("message", receiveSettings, false);
// function that gets called when we recieve a message from the page that sends the settings
function receiveSettings(event) {
//check to make sure the message came from our page
if (event.origin !== "chrome-extension://"+chrome.i18n.getMessage("@@extension_id")) return;
//message came from our extension, do stuff with it
console.debug(event.data);
// clean up
window.removeEventListener("message", receiveSettings, false);
el.parentNode.removeChild(el);
}
gimmeSettings.html的JS
// post the message with our settings
parent.postMessage( localStorage.getItem("testing"), "*" );
Options.html的JS
localStorage.setItem("testing","bleh");
<强>清单强>
{
"name": "Getting at an extensions local storage from a content script",
"description" : "Getting at an extensions local storage from a content script. Be aware that other pages/extensions can use this to get at your settings, but not change them...so dont include sensitvie data.",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js" : ["myscript.js"],
"run_at":"document_idle"
}
],
"permissions": [
"tabs", "<all_urls>"
],
"manifest_version": 2,
"web_accessible_resources": [
"gimmeSettings.html"
],
"options_page": "options.html",
"version":"1.0"
}
有些事要注意....
其他页面和扩展程序可以轻松地使用它来获取扩展程序中的设置,因此请勿使用此方法使用任何敏感数据
从最好的情况我可以告诉他们没有办法通过那个页面改变你的设置,如果有人知道不同请解释。
我使用清单版本2并将页面gimmeSettings设置为可访问。如果你不知道差异清单版本2添加你真的应该阅读.... http://code.google.com/chrome/extensions/trunk/manifestVersion.html
如果你想要一个有效的例子,那就去这里.....
http://forum.valorsolo.com/viewtopic.php?f=36&t=375
答案 1 :(得分:0)
我刚才有了一个想法,但我不知道这听起来是否合理。
我相信我可以从我的localStorage
访问HTML5 content_script
,并在那里存储两个字符串。通过Message Passing,我应该能够告诉content_script
其中一个更改(从选项页面),然后让它更新localStorage
。
这是唯一的选择吗?如果有效的话听起来不太糟糕......