我正在使用Greasemonkey / Tampermonkey访问页面,并根据当前页面上的内容对100元素表进行更改。
短期存储和数组操作工作正常,但我想永久存储数据。我已经尝试过GM_getValue / GM_setValue,GM_SuperValue,localStorage和indexedDB,但我显然缺少一些基本的东西。似乎没有什么可以让我将数组写入永久存储器然后将其读回到我可以访问每个元素的变量中,这样variablename [32]实际上是表中的第32个元素。 (好吧,如果你开始计数为零,那就是33,我这样做。)
我需要在脚本运行时访问整个100元素表,因为我需要在页面本身输出部分或全部表。在最基本的情况下,我有一个从0到99的for循环,每次都打印出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存在某些安全问题或我想做什么(我每次访问时永久存储数组),我无法判断我所做的事情是否有效一个给定的页面,一个元素发生变化)是不可能的。
使用变量[element]格式访问数组非常重要,但除此之外,我可以通过任何方式存储此数据并将其检索到很好。
你有什么建议尝试上述内容?
谢谢!
答案 0 :(得分:4)
我认为你错了。 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";
当然,它只是一个普通的数组,所以你可以使用任何数组方法。