保留用户脚本中设置的变量
Preserve variables set within userscript
我正在用 tampermonkey 编写脚本。
我有一个var arr = ["alex", "felix"]
可以根据脚本的使用情况更新。当有变化时,我将值添加到 arr 中; 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://whosebug.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")
如果您正在编写用户脚本,GM_setValue
、GM_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));
我正在用 tampermonkey 编写脚本。
我有一个var arr = ["alex", "felix"]
可以根据脚本的使用情况更新。当有变化时,我将值添加到 arr 中; 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://whosebug.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")
如果您正在编写用户脚本,GM_setValue
、GM_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));