我可以保留 Greasemonkey 脚本的存储数据,即使它已卸载吗?

Can I keep stored data for a Greasemonkey script even when it's uninstalled?

我编写了一个使用 GM_SetValue 保存首选项的 Greasemonkey 脚本。有时,如果脚本有问题,我建议用户通过删除脚本并重新安装来重新加载脚本。这会破坏脚本的存储值,这对用户来说非常不方便。

有没有更好的方法来存储这些信息?我需要存储的状态是每页,使用 URL 作为 GM_SetValue 的键,如果这有什么不同的话。

是的,您可以复制存储 GM_setValue 数据的 SQLite 文件并保留该信息。

查找数据:

  1. 转到您的 Firefox profile folder.
  2. 进入其中的gm_scripts文件夹。
  3. 适当的文件将根据脚本名称命名,扩展名为 .db
    例如,如果脚本名为:
    // @name _Zombie GM_setValue fun
    那么 SQLite 文件将被命名为:
    _Zombie_GM_setValue_fun.db


如果您将此文件移动或复制到安全位置,则对脚本执行任何操作,然后将文件复制回来;您的数据将被保留。 (只要您不更改脚本的 @name@namespace。)
执行此操作时不必关闭 Firefox,但我会 -- 以防止出现边缘情况。

示例脚本:

// ==UserScript==
// @name     _Zombie GM_setValue fun
// @include  
// @grant    GM_getValue
// @grant    GM_setValue
// ==/UserScript==

var lastVal = GM_getValue ("LastValue");
var newVal  = prompt (
    'The last value was "' + (lastVal || "{not set}") + '". Enter a new value:',
    ''
);
if (newVal)
    GM_setValue ("LastValue", newVal);

测试序列:

  1. 安装脚本。
  2. 重新加载此页面 ()。
  3. 您会看到 The last value was "{not set}". Enter a new value:
  4. 输入Save me.
  5. 重新加载页面。
  6. 你会看到 The last value was "Save me". Enter a new value:
  7. _Zombie_GM_setValue_fun.db复制到安全的地方。
  8. 卸载脚本并(可选)重新启动 Firefox。
  9. 重新安装脚本。
  10. 加载页面,您将看到 "{not set}" 与第 3 步中的一样。
  11. 将保存的 _Zombie_GM_setValue_fun.db 复制回 gm_scripts 文件夹,覆盖较新的 _Zombie_GM_setValue_fun.db(如果存在)。
  12. 重新加载页面,您将看到 Save me 与第 6 步相同。