保留在userscript中设置的变量

Preserve variables set within userscript

本文关键字:变量 设置 userscript 保留      更新时间:2023-09-26

我正在用tampermonkey写一个脚本。

我有一个var arr = ["alex", "felix"],可以根据脚本的使用情况更新。当有变化时,我将值添加到arr as;arr.push("kelix")

但是当脚本重新加载时,arr仍然是var arr = ["alex", "felix"]。newValue不会被压入数组。那么,如何保存变量arr中的更改呢?

我该怎么办?

我会用localStorage。下面的示例脚本将允许您更改文档标题,并在重新加载时记住它:

// ==UserScript==
// @name        Remember value
// @namespace   util
// @description Test that remembers any saved value after reload
// @include     http://stackoverflow.com/*
// @version     1
// @grant       none
// ==/UserScript==
// Try to load saved data from local storage
const FIELD_NAME = "userscript_TEST";
var saved = localStorage[FIELD_NAME]?JSON.parse(localStorage[FIELD_NAME]):{};
// Save data when leaving tab
window.addEventListener("unload", function() {
    localStorage[FIELD_NAME] = JSON.stringify(saved);
});
// This changed document title and remembers it
window.changeDocumentTitleForever = function(title) {
    saved["title"] = title;
    document.title = title;
}
// This loads title after loading page
if(saved.title)
    document.title = saved.title;

在控制台中使用:

changeDocumentTitleForever("test")

如果您正在编写userscript, GM_setValueGM_getValue可能比localStorage更好。

var arr = ["alex", "felix"];
try { arr = JSON.parse(GM_getValue('arr', '["alex", "felix"]')); }
catch (_ignore) { /* ignore when JSON.parse fail */ }
// do something with arr
arr.push('kelix');
GM_setValue('arr', JSON.stringify(arr));