Greasemonkey:更新时保持用户配置不变

Greasemonkey: leaving user configuration intact while updating

我已经为需要一些用户配置的 Greasemonkey 编写了一个用户脚本。要指定他们希望脚本如何运行,用户需要设置几个变量。

现在,脚本是这样设置的:

// ==UserScript==
// @name        My script
// @description A simplified example
// @include     http://www.example.com/
// @version     0.0.1
// @updateURL   https://www.example.com/myscript.meta.js
// ==/UserScript==

// Configuration
var config1 = "on";
var config2 = "off";

// Programs
[various functions that refer to the configuration variables]

我希望能够使用 Greasemonkey's automatic updates 更新脚本,同时保持用户的配置行不变。基本上,我不想强​​迫每个用户在每次更新后重新配置。

是否有更新 Greasemonkey 用户脚本同时保持某些配置不变的好方法?

您可能希望使用 greasemonkey 函数 GM_getValue() 和 GM_setValue(),它们将存储保持原样的值,直到它们再次更改。脚本可以根据用户需要设置值,并在需要的地方获取值。

特定的 GM 功能需要特殊授权,在用户脚本的元数据中:

// @grant         GM_getValue
// @grant         GM_setValue

您使用 GM 值函数的代码可能如下所示:

var value = 18;
GM_setValue('dataName', value);
if (GM_getValue('dataName') == 18) ...

当您对脚本进行更新时,您可以先检查它们是否已被写入,而不是让 GM_setValue 设置的值被覆盖:

var value = 18;
if (typeof GM_getValue('dataName') === 'undefined')
  GM_setValue('dataName', value);

为了让用户能够控制这些设置,您可以注入一个 HTML 界面来显示数据库条目的值,并允许对它们进行设置。这种方法将使此类设置不受脚本更新的影响(只要脚本不覆盖数据库值)。

此外,this question 也可能是有益的阅读。