Вопрос по google-chrome-extension, google-chrome – Расширение Chrome присоединяет свойства к каждой вкладке

0

В расширении Chrome я создал свойства вкладок, которые я пытаюсь сохранить с каждой вкладкой. Каков наилучший способ сделать это? Я изучил использование localStorage, но кажется, что может быть более простой способ. Данные ни в коем случае не являются постоянными, они существуют только до тех пор, пока существует вкладка.

Вы, вероятно, можете создать «массив» что ключ является идентификатором вкладки, а содержимое - то, что вы хотите Alvin Wong
Да, это сработало бы на самом деле. Мне, вероятно, придется закрыть скрипт очистки на вкладке, чтобы массив не всплывал с множеством вкладок. nathancahill

Ваш Ответ

2   ответа
4

localStorage, Без понятия «данные отнюдь не постоянны», уже известно, что: идентификаторы вкладок уникальны в течение сеанса. Из этого факта следует, что данные непостоянны.

Лучший способ реализовать это - поддерживать хэш свойств вкладок:

chrome.tabs.onCreated (optional, add initial info to tab hash) chrome.tabs.onUpdated - (Add/) Update tab hash (URL is available) chrome.tabs.onRemoved - Remove hash entry

табуляция объекты не дорогие: все свойства являются примитивами (булевы числа, числа, строки).

Например (только фоновая страница):

var tabStore = {};         // <-- Collection of tabs
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    tabStore[tabId] = tab;
});
chrome.tabs.onRemoved.addListener(function(tabId) {
    delete tabStore[tabId];
});
Спасибо! Очень полезно. Это сработало отлично. nathancahill
Вчера я просто пытался разобраться с этим сам, и после дня возни с местным хранилищем пришел к точно такому же выводу. Рад, что я наконец-то оказался в нужном месте! Спасибо :)
Могут ли эти значения, присвоенные вкладке Store, доступны на всплывающей странице?
К счастью для меня (не могу говорить за OP), мне не нужно событие onUpdated, но хорошая информация :)
Обратите внимание, что для каждого "жизненного цикла страницы",onUpdated уволен дважды (changeInfo.status: загрузка, полная). Итак, если вы хотите действовать только один раз на событие смены страницы, игнорируйте одно из них, напримерif (changeInfo.status != 'loading') {/*...do whatever you want..*/}.
2

Не забудьте также прослушать tabs.onReplaced и соответствующим образом обновить tabStore.

chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
    tabStore[addedTabId] = tabStore[removedTabId];
    delete tabStore[removedTabId];
});

Chrome может изменить идентификатор вкладки под капотом без предупреждения или знаков. Насколько я знаю, единственное место, где это происходит, это Google "мгновенный поиск". когда вы вводите поиск в адресной строке. Это может быть крайний случай, но если вы не отследите это, это может оказаться очень коварной проблемой.

Похожие вопросы