2012-06-20 2 views
0

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

+1

Возможно, вы можете создать «массив», в котором ключ является идентификатором табуляции, а содержимое - тем, что вы хотите –

+0

Да, это сработало бы на самом деле. Вероятно, мне пришлось бы иметь скрипт очистки на закрытой вкладке, чтобы массив не набросал много вкладок. – nathancahill

ответ

4

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

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

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

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

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]; 
}); 
+0

Я просто пытался это сделать сам вчера, и после того, как день беспорядка с местным хранилищем пришел к такому же выводу. Рад узнать, что я, наконец, оказался в нужном месте! Спасибо :) –

+0

Обратите внимание, что для каждого «жизненного цикла страницы» 'onUpdated' запускается дважды (' changeInfo.status': загрузка, завершение). Итак, если вы хотите действовать только один раз на событии изменения страницы, игнорируйте один из них, например 'if (changeInfo.status! = 'Loading') {/*...do, что вы хотите .. * /}'. –

+0

К счастью для меня (не могу говорить для OP) Мне не нужно onUpdated событие, но хорошая информация :) –

1

ВАЖНОЕ ДОПОЛНЕНИЕ к ответу Rob W в.

Удостоверьтесь, что вы также можете прослушивать tabs.onРедактируйте также и обновите tabStore соответственно.

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

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

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