已启用选项的内容脚本Chrome扩展程序没有后台页面?

时间:2012-01-27 13:23:50

标签: javascript google-chrome-extension storage options content-script

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

this answer开始,我认为我需要一个背景页面,我不想添加到我的扩展程序中 - 我不希望它增加不必要的重量。

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

2 个答案:

答案 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

这是唯一的选择吗?如果有效的话听起来不太糟糕......