2013-09-21 30 views
1

早上,Firefox擴展保留數據的正確方法

我的Firefox擴展將產生,保留和使用一些基於文本的數據。目前,我不會讓它在不同計算機上的Firefox之間同步。我需要的只是將數據寫入文本文件並提取它們。考慮到這一點,我的問題是:

  1. 我應該在哪裏保存這些數據?我的意思是,在<profile>/extensions文件夾中,我有我的*.xpi文件(這是某種zip文件),沒有用於我的擴展名的專用文件夾。我是否需要創建一個特殊文件夾並將我的數據保存在該文件夾中的文本文件中?或者還有其他更適當的方法來做到這一點嗎?

  2. 我的數據將是這樣的:

key1, value1, value2, value3, value4 
key2, value1, value2, value3, value4 
key3, value1, value2, value3, value4 

能否請您推薦給讀/寫這些字符串的最好方法?典型的寫/附加/讀純JavaScript,或使用JSON或類似的東西?

感謝, 浣熊

回答

3

通常將數據保存在配置文件夾中。 ProfD

Components.utils.import("resource://gre/modules/FileUtils.jsm"); 

// get the "data.txt" file in the profile directory 
var file = FileUtils.getFile("ProfD", ["data.txt"]); 

另見File I/O Snippets page以獲取更多信息。

如果您有多個文件,最好在ProfD中爲您的擴展名創建一個專用子文件夾。

請勿將數據保存在extensions/!這可能會影響插件管理器。另外,創建解包擴展時,請勿將數據保存在擴展目錄中,因爲該文件夾在更新期間將被刪除。

你如何寫數據取決於你。 SQLite (Storage)對於一些字符串可能有些過分,但是如果你有很多數據(多兆字節)並且也希望快速隨機查找,那麼它會很好。純文本文件或JSON.stringify編碼的數據可能會更好。另外,如果您的數據足夠「小」,您可以使用首選項服務,而不必亂用實際文件。

順便說一句:您可以很容易地使用XMLHttpRequest(但當然不能用它來寫數據)從文件系統讀迴文本(JSON)和/或xml數據。

SDK插件可能仍然使用上面的文件I/O內容(SDK io/file模塊在使用IMO時目前太有限)。該SDK還提供專用的indexed-dbsimple-prefs模塊。

1

SQLite is built in最近用作數據存儲機制版本的Firefox。有關更多信息以及如何使用FF包裝器API的示例,請參閱MDC

另一種選擇可能是使用Local nsIFiles來保存數據。

1

最簡單的方法是使用localStorage。Firefox在配置文件夾中創建存儲並在用戶卸載插件後自動將其刪除。作爲一種副作用,您可以重複使用您的代碼以用於Chrome和Safari瀏覽器擴展