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

时间:2015-02-13 11:30:31

标签: firefox greasemonkey

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

有更好的方法来存储这些信息吗?我需要存储的状态是每页,使用URL作为GM_SetValue的键,如果这有任何区别。

1 个答案:

答案 0 :(得分:3)

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

要查找数据:

  1. 转到Firefox profile folder
  2. 在其中输入gm_scripts文件夹。
  3. 将根据脚本名称命名相应的文件,其扩展名为.db 例如,如果脚本命名为:
    // @name _Zombie GM_setValue fun
    然后将SQLite文件命名为:
    _Zombie_GM_setValue_fun.db

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

    示例脚本:

    // ==UserScript==
    // @name     _Zombie GM_setValue fun
    // @include  https://stackoverflow.com/questions/28498610/*
    // @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. 重新加载此页面(stackoverflow.com/questions/28498610/)。
    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. 加载页面,您将在步骤3中看到"{not set}"
    11. 将保存的_Zombie_GM_setValue_fun.db复制回gm_scripts文件夹,覆盖较新的_Zombie_GM_setValue_fun.db(如果有)。
    12. 按照步骤6重新加载您将看到Save me的页面。