Альтернативы расширению Chrome для локального хранилища? - PullRequest
7 голосов
/ 03 мая 2011

Я ищу механизм хранения, который будет сохраняться на всех сайтах.У меня есть примитивные типы данных числа / строки, которые мне нужно хранить.localStorage не работает для меня, потому что он подпадает под ту же политику происхождения.Мне нужно, чтобы мои данные были одинаковыми на всех веб-сайтах, но многие из них должны быть привязаны к конкретным вкладкам и доступны через оглавления.

Может ли кто-нибудь предложить подходящий механизм для достижения этой цели?

РЕДАКТИРОВАТЬ: В настоящее время я реализую код первых ответов и не особо разглядываю.У меня есть следующее ...

background.html

note: tabStorage - переменная класса в этой функции

    function store(){
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.req == "save") {
        tabStorage[sender.tab.id] = request.data;
       }

    if(request.req == "load") {
        sendResponse(tabStorage[sender.tab.id]);
    }
    });
}

contentscript.js

ответ возвращается undefined

 chrome.extension.sendRequest({req: "load"}, function(response) {
            console.log("getting stak");
            console.log(response.data);
 });

что я делаю не так?код обращается как к загрузке, так и к сохранению, поэтому я знаю, что он возвращается туда и обратно, но возвращается undefined.почему?

1 Ответ

9 голосов
/ 03 мая 2011

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

ОБНОВЛЕНИЕ Если вам не нужно хранилище для хранения значений между перезапусками браузера, то вам не нужен localStorage.Просто сохраните все на фоновой странице и идентифицируйте вкладки по их идентификаторам.Фоновая страница будет сохранять значения, пока открыт браузер.Например:

скрипт содержания:

//save
chrome.extension.sendRequest({cmd: "save", data: {param1: "value1", param2: "value2"});
...
//load
chrome.extension.sendRequest({cmd: "load"}, function(response) {
    console.log("tab data:", response)
});

фоновая страница:

var tabStorage = [];
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "save") {
        tabStorage[sender.tab.id] = request.data;
    }

    if(request.cmd == "load") {
        sendResponse(tabStorage[sender.tab.id]);
    }
});
...