我正在使用Greasemonkey / Tampermonkey来访问页面,并根据当前页面的内容对100个元素的表进行更改。

短期存储和数组操作可以正常工作,但是我想永久存储数据。我已经尝试过GM_getValue / GM_setValueGM_SuperValuelocalStorageindexedDB,但是我显然缺少一些基本知识。
似乎没有什么可以让我将数组写入永久存储,然后再将其读回到变量中,以便我可以访问每个元素,因此variablename[32]实际上是表中的第32个元素(好吧,如果您开始计数为零,则为第33个元素,我这样做)。

脚本运行时,我需要访问整个100个元素的表,因为我需要在页面本身上输出其中的部分或全部。在最基本的情况下,我有一个for循环,它从0到99,每次都打印出variablename[i]的值。

我对任何方法都没有倾向,我只想让Frickin的东西在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]格式访问数组很重要,但是除此之外,我可以通过任何方式存储此数据并简单地检索它。

最佳答案

我认为您要解决这个错误。 LocalStorage存储字符串,因此在LocalStorage中存储数组的最简单方法是将其字符串化为JSON并存储JSON。然后,在读回时,您将JSON解析回数组。

因此,要读入,请执行以下操作:

var currentData = JSON.parse(localStorage.getItem("currentData") || "[]");

要保存数据,请执行以下操作:
localStorage.setItem("currentData", JSON.stringify(currentData));

工作演示:http://jsfiddle.net/jfriend00/6g5s6k1L/

以这种方式执行操作时,currentData是一个包含普通数组的变量(在您从LocalStorage读取数据之后)。您可以使用.push()向其中添加项目,读取具有数字索引的项目,例如:
var lastItem = currentData[currentData.length - 1];

或者,使用以下命令更改数组中的项目:
currentData[0] = "newValue";

当然,它只是一个普通的数组,因此您可以在其上使用任何数组方法。

09-25 17:25
查看更多