在firefox插件中持久保存数据

时间:2016-01-14 14:51:45

标签: firefox-addon firefox-addon-sdk

我的插件收集了一些关于在firefox中打开的每个标签的上下文数据。我希望它能在浏览器崩溃的情况下被持久化和恢复。此数据并非特定于选项卡的URL,而是选项卡实例本身(可能类似于“在此选项卡中执行重定向的次数”)。我考虑过将一些数据附加到firefox会话(崩溃后打开浏览器时恢复的那个),但我找不到任何文档是否完全可行或者如何操作。

是否可以向firefox会话添加数据?还有其他方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:0)

我知道有两种附加(扩展)数据持久性方法。一个是Storage API,它使用SQLite,另一个是simple-storage API,它是附加SDK的一部分。我发现简单存储会偶尔随机发生健忘症。

简单存储只是一个包含JSON可序列化对象的本地文件。如链接文档中所述,在会话开始时对其进行初始化,并在需要更改值时保存。它在信息上等同于键值存储,但读写访问涉及加载或保存整个商店。

我发现SQLite接口(存储)可靠,快速(异步调用IF)。

我不知道这些持久性选项中是否有一个或两个都是为了将​​来的弃用。由于它们似乎是将Firefox演变为Chrome,您可能需要尝试使用Chrome扩展程序开发,特别是使用storage API,这似乎是一个真正的完全异步键值存储。

答案 1 :(得分:0)

似乎有一个可能用于实现此目的的API - nsISessionStore

你可以存储这样的价值:

// endEvent.js
module.exports = {

  setEnd: function(event) {
    Event.findOne(event).exec(function (err, result) {
      result.end = true;
      result.save();
    });
  }
};

并像这样检索它:

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);

可以找到更多信息和示例here

此外,如果像我一样,你想在附加SDK中使用它,你可以通过这种方式获得适当的服务:

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

您需要提供的标签不是SDK中的标签,您需要将其转换为XUL标签:

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

总结一下。如果 - 例如 - 想要为每个添加的选项卡添加存储值,可以这样做:

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