Опции с включенным контентом-скриптом для расширения Chrome без фоновой страницы? - PullRequest
3 голосов
/ 27 января 2012

Я делаю расширение для скрипта контента для Google Chrome, оно добавляет функциональность на страницу веб-сайта. Я хочу добавить пару опций, не так уж и сложно, мне просто нужны две строки (ни одна из которых не является конфиденциальной информацией пользователя).

Из этого ответа я предполагаю, что мне нужна фоновая страница, которую я бы не хотел добавлять в свое расширение - я не хочу, чтобы она набирала лишний вес.

Мне действительно нужна фоновая страница, или у меня могла бы быть страница параметров без нее (и какое хранилище я мог бы использовать)?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

UPDATE
Начиная с Chrome 20 теперь вы можете использовать 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's JS

// post the message with our settings
parent.postMessage( localStorage.getItem("testing"), "*" );

JS Options.html

localStorage.setItem("testing","bleh");

Manifest

{
    "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

0 голосов
/ 27 января 2012

У меня только что была идея, но я не знаю, звучит ли она или имеет смысл.

Я полагаю, что могу получить доступ к HTML5 localStorage из моего content_script и сохранить там две строки. Через Передача сообщений Я смогу сообщить content_script, что один из них изменился (со страницы параметров), и затем обновить его localStorage.

Это был бы единственный вариант? Звучит неплохо, если работает ...

...