2016-01-14 5 views
0

Мой плагин собирает некоторые контекстуальные данные о каждой вкладке, открытой в firefox. Я бы хотел, чтобы он сохранялся и восстанавливался в случае сбоя браузера. Эти данные не относятся к URL-адресу вкладки, а скорее к экземпляру табуляции (это может быть что-то вроде «сколько раз было перенаправление, выполняемое на этой вкладке»). Я думал о прикреплении некоторых данных к сеансу firefox (тот, который восстанавливается при открытии браузера после сбоя), но я не могу найти никакой документации о том, возможно ли это вообще или как это сделать.сохраняющиеся данные в плагине firefox

Можно ли добавить данные в сеанс firefox? Есть ли другой способ достичь этого?

ответ

0

Похоже, что существует API, который можно использовать для достижения этого - nsISessionStore.

вы можете хранить значение, как это:

var ss = Components.classes["@mozilla.org/browser/sessionstore;1"] 
       .getService(Components.interfaces.nsISessionStore); 
var currentTab = gBrowser.selectedTab; 
var dataToAttach = "I want to attach this"; 
ss.setTabValue(currentTab, "key-name-here", dataToAttach); 

и получить его так:

var retrievedData = ss.getTabValue(currentTab, "key-name-here"); 

подробнее и примеры можно найти here.

Кроме того, если, как я, вы хотите использовать это в адд-SDK вы можете получить соответствующую службу таким образом:

var { Cc, Ci } = require('chrome'); 
var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); 

вкладки вы должны предоставить не один из SDK и вы необходимо преобразовать его в закладку XUL:

var { viewFor } = require("sdk/view/core"); 
var let lowLevelTab = viewFor(tab); 

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

var tabs = require("sdk/tabs"); 
var { viewFor } = require("sdk/view/core"); 

tabs.on('open', tab => { 
    var { Cc, Ci } = require('chrome'); 
    var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); 
    var lowLevelTab = viewFor(tab); 
    ss.setTabValue(lowLevelTab, "key-name-here", "value"); 
}); 
0

Существует два подхода к сохранению данных (расширение), о которых я знаю. Один из них - Storage API, который использует SQLite, а другой - simple-storage API, который является частью SDK Add-on. Я нашел простое хранилище для случайных случайных приступов амнезии.

Простое хранилище - это просто локальный файл, содержащий объект, сериализуемый JSON. Вы инициализируете его в начале сеанса, как описано в связанной документации, и сохраняйте его, когда хотите изменить значения. Это информативно эквивалентно хранилищу значений ключей, но доступ на чтение и запись включает загрузку или сохранение всего хранилища.

Я нашел интерфейс SQLite (Storage) надежным и быстрым (IF вызывается асинхронно).

Я не знаю, будет ли один или оба из этих вариантов сохранения сохранены для будущего устаревания. Поскольку они, кажется, деформируют Firefox в Chrome, вы можете попробовать свои силы в разработке расширения Chrome, в частности, используя storage API, который, как представляется, является истинно полностью асинхронным хранилищем ключей.

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