Получение данных со страницы параметров в введенный код - PullRequest
4 голосов
/ 13 декабря 2011

Мое расширение работает на существующей веб-странице, которую я не контролирую. Я хочу иметь страницу опций для этого. Что я не понял, так это как получить значения опций из введенного кода. localStorage не разглашается, конечно. Я пытался использовать sendRequest / addListener в обоих направлениях, хотя было бы гораздо предпочтительнее перенести значения со страницы параметров в введенный код, чем наоборот -

В начале я просто ставлю флажки опций на манипулируемой странице (той, в которую вводится код), и эти флажки устанавливают значения в localStorage:

localStorage.showStuff = !!$(evt.target).attr(‘checked’);

Затем я проверяю эти значения в коде:

if (localStorage.showStuff == ‘true’) { … }

Я переместил код флажка на страницу параметров, и он сделал sendRequest, когда параметры изменились, и у моего введенного кода был прослушиватель сообщения, но он не получает сообщения (моя фоновая страница делает , но это мне не поможет). Я также пытался сделать так, чтобы внедренный код вызывал обратный вызов на страницу параметров, но объект sendResponse, кажется, работает только на время обработчика уведомлений (не удивительно, но мне пришлось попробовать).

Прямо сейчас в моем манифесте permissions перечислены иностранные страницы ("http://example.com/*") и “tab”.

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

Любые идеи приветствуются, заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 23 февраля 2014

Я новичок в расширениях Chrome, но когда я попытался написать / прочитать локальное хранилище как из фонового скрипта, так и со страницы параметров, это сработало отлично.

Я не пробовал использовать локальное хранилище, но API-интерфейс хранилища Chrome

взгляните на это

код A: (комплект)

chrome.storage.sync.set({'key':'qwe'});

код B: (получить)

chrome.storage.sync.get('key', function(response) {
    console.log(response); // 'qwe'
});

Вы можете поместить либо код A на заднем плане, либо код B на странице параметров или наоборот. они используют одно и то же хранилище.

это работает для меня. я надеюсь, ты тоже доберешься.

1 голос
/ 13 декабря 2011

Следует помнить, что только фоновая страница является долгоживущей.Остальные части вашего расширения Chrome являются временными (скрипты содержимого на время навигации по сайту, страницы параметров только при открытом и т. Д.).

Поэтому вам нужно использовать обмен сообщениями и сохранять вещи, используя фоновую страницу,Однако подготовьтесь к API хранилища, которое должно скоро появиться.Это облегчит вам задачу!

Проверьте это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...