问题描述
我正在使用 Greasemonkey/Tampermonkey 访问页面并根据当前页面上的内容对 100 个元素的表进行更改。
短期存储和数组操作工作正常,但我想永久存储数据。
我已经尝试过GM_getValue
/ GM_setValue
、 GM_SuperValue
、 localStorage
和indexedDB
,但我显然缺少一些基本的东西。
似乎没有什么允许我将数组写入永久存储,然后将其读回一个我可以访问每个元素的variablename[32]
,这样variablename[32]
实际上是表中的第 32 个元素(好吧,如果您开始计数,则为第 33 个在零,我这样做)。
我需要在脚本运行时访问整个 100 元素表,因为我需要在页面本身上输出部分或全部内容。
在最基本的情况下,我有一个从 0 到 99 的 for 循环,每次打印出variablename[i]
的值。
我对任何方法都没有偏好,我只是想让这个该死的东西在 Greasemonkey/Tampermonkey 脚本中工作。
在脚本的顶部,我有这个:
for (var i = 0; i <= 99; i++) {
currentData[i] = localStorage.getItem(currentData[i]);
}
上一节的目的是将 100 个条目读入currentData
数组。
现在这对我来说实际上不起作用,可能是因为我一开始就没有正确存储东西。
在中间,修改其中一个元素后,我想通过这样做来替换它:
localStorage.setItem(
currentData[specificElementToChange], differentStuff);
上面的目的是改变 100 行数据之一并永久存储,所以下次读取顶部的代码时,它将拉出所有 100 个条目,其中一个元素被上述行更改。
这是一般原则。
我不知道我正在做的事情是否因为 Firefox/Chrome 的一些安全问题而不起作用,或者我想要做什么(永久存储一个数组,每次我访问给定页面时,一个元素都会发生变化)是不可能的。
使用variable[element]
格式访问数组很重要,但除此之外,我可以存储此数据并检索它的任何方式对我来说都很好。
1楼
我认为你这样做是错误的。 LocalStorage 存储字符串,因此在 LocalStorage 中存储数组的最简单方法是将其字符串化为 JSON 并存储 JSON。 然后,在读回它时,您将 JSON 解析回一个数组。
因此,要阅读它,请执行以下操作:
var currentData = JSON.parse(localStorage.getItem("currentData") || "[]");
要保存数据,请执行以下操作:
localStorage.setItem("currentData", JSON.stringify(currentData));
工作演示: :
这样做时, currentData
是一个包含普通数组的变量(在您从 LocalStorage 读入数据之后)。
您可以使用.push()
向其中添加项目,读取带有数字索引的项目,例如:
var lastItem = currentData[currentData.length - 1];
或者,使用以下命令更改数组中的项目:
currentData[0] = "newValue";
当然,它只是一个普通的数组,所以你可以对它使用任何数组方法。