21

我爲Facebook寫了一個Greasemonkey/Tampermonkey腳本。我需要存儲數據以便稍後檢索它。爲此,我使用了localStorage
這工作正常。但我注意到,幾個小時後,我存儲的所有數據都被刪除了automagicllay。 Facebook本身可能會刪除所有localStorage數據。如何將數據存儲在Chrome Tampermonkey腳本中?

現在,我搜索了替代品。

  1. 餅乾:沒有,當用戶清除這個歷史將被刪除。
  2. Web SQL:顯然它被w3.org丟棄。所以在不久的將來,我認爲chrome可能不會使用web sql。

我想將數據存儲在客戶端系統中。我有什麼選擇?我應該使用FileSystem來存儲數據嗎?

+0

這取決於數據的類型。對於原始二進制數據,您可以使用數據[Blob API](http://www.nczonline.net/blog/2012/06/05/working-with-files-in-javascript-part-5-blobs/)。爲了緩存更多數據,你也可以使用localStorage API。它與大多數瀏覽器兼容(http://caniuse.com/namevalue-storage)。 – smitrp

+0

正如我所提到的,我正在使用localStorage,但每隔幾個小時後就會清除。 –

+0

Tampermonkey,Chrome的用戶腳本和Greasemonkey是相關但不是相同的東西。這個問題對你使用的東西有點模糊。我假設你在Chrome上使用了Tampermonkey擴展(你應該是,它比直接的Chrome用戶腳本更好)。 –

回答

43

由於您使用的是Tampermonkey(Chrome)和Greasemonkey(Firefox)。繼續並使用GM_setValue()。它不能由Facebook或任何其他網站清除。

它也具有跨域存儲值的優點。

~~~
當心的沼澤標準GM_setValue()火狐有點問題。它可以導致腳本實例崩潰在無效值上 - 因此最好使用序列化程序(如GM_SuperValue)來存儲除字符串以外的任何內容。即使無辜的整數可能會導致默認GM_setValue()崩潰。

目前,只有GM_setValue(),cookies,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已經很長時間了。)

+0

注1:Tampermonkey(Chrome)上不存在'GM_SuperValue',至少在2017.01.24 chrome 55.0.2883.87 m(64位)上。 – Mithril

+1

注2:必須在userscript頭部添加'// @grant GM_setValue'才能使用魔術。 – Mithril

+0

@Mithril,爲了在Tampermonkey或任何其他兼容的腳本引擎中使用'GM_SuperValue',您必須按要求「@ require」。你還需要*兩個*'@ grants'。一個用於'GM_setValue',一個用於'GM_getValue'。 –

相關問題