【发布时间】:2015-10-08 09:51:49
【问题描述】:
我正在使用 Greasemonkey/Tampermonkey 访问页面并根据当前页面上的内容对包含 100 个元素的表格进行更改。
短期存储和数组操作工作正常,但我想永久存储数据。我试过GM_getValue/GM_setValue、GM_SuperValue、localStorage和indexedDB,但我显然缺少一些基本的东西。
似乎没有什么可以让我将数组写入永久存储,然后将其读回一个变量,我可以在其中访问每个元素,这样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] 格式访问数组很重要,但除此之外,我可以通过任何方式存储这些数据并轻松检索它。
【问题讨论】:
-
localStorage中的item最初是如何设置的?您是在
for循环之前自己创建它们,还是它们已经存在?您最好将数组存储为一个项目,而不是将每个单独的索引存储为自己的项目。您可以使用 JSON 执行此操作:stackoverflow.com/a/3357615/551093 -
第一次运行脚本时,我为每个元素设置了默认值。计划是在第一次成功运行后注释掉该行,然后一次只更改一个元素。不过,我从来没有让整个事情顺利进行,所以我从来没有按照计划进行。
-
将数组存储为一项并不好,因为每个元素本身就是一个定义长度的复杂字符串。我实际上是通过使用一个在每个单独的字符串中有多个条目的一维数组来伪造一个二维数组。或者无论如何都要尝试。存储/读取变量[i]的基本原理是否可行?
-
我不确定 "定义长度的复杂字符串" 与使用
JSON.stringify()将其存储为一个项目,然后使用JSON.parse()有什么关系把它变成一个数组。我也不明白为什么你需要捏造一个二维数组,而不仅仅是使用一个二维数组。尽管您进行了详细的描述,但从局外人的角度来看,很难弄清楚您实际上要做什么(对不起)。我认为最好的办法是为您创建一个 jsFiddle,其中包含您目前拥有的所有内容(包括 HTML)。这应该有助于我们为您提供帮助。 -
我真正想做的是存储一个 100 x 200 的数组。我读到你不能存储二维数组,所以我选择了一个包含 100 个元素的数组,每个元素长 200 个字符。也许这是不清楚的想法。但是,我不明白,如果在集合期间简单地调用变量 [i] 将允许我使用相应的 get 恢复变量 [i]。 1 到 100 很容易访问,200 轴很痛苦,但我可以使用 substr 来处理它。至少有一个轴是清晰的。你真的可以设置 variable[x][y] 然后得到 variable[x][y] 并期望返回相同的数据吗?
标签: javascript arrays local-storage greasemonkey tampermonkey