3

我正在为 Google Chrome 制作内容脚本扩展,它为网站页面添加了功能。我想添加几个选项,其实没什么大不了的,我只需要两个字符串(都不是敏感的用户数据)。

这个答案,我假设我需要一个背景页面,我不想将它添加到我的扩展中 - 我不希望它获得不必要的重量。

我真的需要一个背景页面,或者我可以有一个没有它的选项页面(以及我可以使用哪个存储)?

4

2 回答 2

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

于 2012-03-06T07:58:57.733 回答
0

我只是有一个想法,但我不知道它是否合理或有意义。

localStorage我相信我可以从我的.html 访问 HTML5 content_script,并将两个字符串存储在那里。通过消息传递,我应该能够告诉content_script其中一个已更改(从选项页面),然后让它更新其localStorage.

这会是唯一的选择吗?如果它有效的话,听起来还不错……

于 2012-01-27T13:33:30.407 回答