如何/在哪里将数据存储在除 localStorage 之外的 Chrome Tampermonkey 脚本中?
Posted
技术标签:
【中文标题】如何/在哪里将数据存储在除 localStorage 之外的 Chrome Tampermonkey 脚本中?【英文标题】:How/Where to store data in a Chrome Tampermonkey script other than localStorage? 【发布时间】:2013-03-21 17:55:09 【问题描述】:我为 Facebook 编写了一个 Greasemonkey/Tampermonkey 脚本。我需要存储数据以便以后检索它。为此,我使用了localStorage
。
效果很好。但我注意到,几个小时后,我存储的所有数据都被自动删除了。可能 Facebook 本身会删除所有 localStorage 数据。
我寻找替代品。
-
Cookies :不,当用户清除历史记录时,它会被删除。
Web SQL :显然它被 w3.org 删除了。所以在不久的将来,我认为 chrome 可能也不会使用 web sql。
我想将数据存储在客户端系统中。我有什么选择?我应该使用 FileSystem 来存储数据吗?
【问题讨论】:
这取决于数据的类型。对于原始二进制数据,您可以使用 data Blob API 。要缓存更多数据,您也可以使用 localStorage API。大多数浏览器都是compatible。 正如我提到的,我正在使用 localStorage,但每隔几个小时就会清除一次。 Tampermonkey,一个 Chrome 用户脚本和 Greasemonkey 是相关的,但不是一回事。这个问题对您使用的内容有点模棱两可。我假设你在 Chrome 上使用 Tampermonkey 扩展(你应该是,它比直接的 Chrome 用户脚本更好)。 我不知道它会有多大用处,但你可以看看这个。 goo.gl/CQA1h 【参考方案1】:由于您使用的是Tampermonkey (Chrome) 和 Greasemonkey (Firefox)。继续使用GM_setValue()
。它不能被 Facebook 或任何其他网站清除。
它还具有跨域存储值的优点。
~~~
请注意,沼泽标准 GM_setValue()
在 Firefox 上有些问题。它可能导致脚本实例在无效值上崩溃——因此最好使用序列化程序,例如GM_SuperValue,来存储字符串以外的任何内容。即使是看似无辜的整数也可能导致默认的GM_setValue()
崩溃。
目前,只有 GM_setValue()
、cookie、localStorage 和 IndexedDB 可用于两种浏览器上的持久数据。
IndexedDB 也可能做你想做的事,但它不像GM_setValue()
那样容易使用。
更新: 如今,别忘了使用:
// @grant GM_setValue
和
// @grant GM_getValue
另外,如果您确实使用了 GM_SuperValue 库,您现在可以添加:
// @require http://userscripts-mirror.org/scripts/source/107941.user.js
在元数据块中。 (因为 userscripts.org 早已死去。)
【讨论】:
注 1:GM_SuperValue
在 Tampermonkey (Chrome) 上不存在,至少在 2017.01.24 chrome 55.0.2883.87 m(64 位)上。
注意 2:必须在用户脚本标题上添加 // @grant GM_setValue
才能使用魔法。
@Mithril,为了在 Tampermonkey 或任何其他兼容的脚本引擎中使用GM_SuperValue
,您必须如图所示@require
。你还需要两个 @grants
。一种用于GM_setValue
,一种用于GM_getValue
。
谢谢。但是有没有办法让全局存储空间可以跨多个脚本访问?
@SGSVenkatesh,唯一的方法是托管您自己的数据应用程序或使用类似 Google 文档的 API。也就是说,将数据存储在多个脚本可以通过 http(s) 读取/写入的外部数据中。以上是关于如何/在哪里将数据存储在除 localStorage 之外的 Chrome Tampermonkey 脚本中?的主要内容,如果未能解决你的问题,请参考以下文章
sessionStorage 和 localStorage 存储在哪里?
浏览器支持的Localstorage最大支持多大,数据是储存在哪里
NodeJS:在客户端将 JWT 存储在哪里? sessionStorage、localStorage 还是 cookie?