3

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

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

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

ответ

2

UPDATE
По Chrome 20 теперь вы можете использовать API для хранения .....
http://code.google.com/chrome/extensions/storage.html

Старый способ
Что я делаю, это создать iframe, который указывает на страницу в моем расширении, в которой есть скрипт, который получает нужные мне настройки из локального хранилища, а затем отправляет его своему родителю в сообщении, которое затем получает скрипт контента ..... хорошо, что было объяснением дерьма, код говорит, что это лучше;) .......

Content Script

// 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"); 

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

Некоторые вещи отметить ....
Другие страницы и расширения могут легко использовать это, чтобы также получить настройки из вашего расширения, поэтому не использовать какие-либо конфиденциальные данные с помощью этого метода.
Из лучших я могу сказать, что им не удастся изменить ваши настройки через эту страницу tho, если кто-то знает разные, объясните.
Я использую манифест версии 2 и установил доступ к странице gimmeSettings. Если вы не знаете отличия, выраженную в версии 2, добавьте, что вам действительно стоит ее прочитать .... http://code.google.com/chrome/extensions/trunk/manifestVersion.html

И если вы хотите, чтобы рабочий пример, то идите сюда .....
http://forum.valorsolo.com/viewtopic.php?f=36&t=375

+0

Спасибо, это отличная новость. Кроме того, я просто подумал, что его можно было бы обернуть в библиотеку (что я сделаю, если мне удастся найти ее для использования до того, как разработчики Chrome сделают более красивый API). На самом деле этот ответ заставляет меня хотеть сделать расширение с помощью страницы параметров только ради этого :) Поздравляю. –

+0

О, и у меня была идея: возможно, чувствительные настройки могут быть отправлены с использованием некоторой [асимметричной надписи] (http://www.hanewin.net/encrypt/) (ссылка не реализует дешифрование, но является отправной точкой). Однако, похоже, это чертовски много хакеров. Но звучит весело! У нас должно быть больше часов в день, чтобы делать такие вещи. –

0

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

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

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

Смежные вопросы