我正在开发一个Firefox附加组件,其中包括生成附加组件使用的网站缩略图。到目前为止,我一直使用简单存储通过图像数据URL存储它们。这有两个问题:存储空间有限并且发送非常长的字符串似乎不是最佳的(我假设浏览器已经优化了加载图像文件的方法,但可能不是数据URL)。我认为将文件保存到磁盘应该不是问题,问题是在哪里。我google了很多,找不到任何东西。这有自然的地方吗?有没有限制?
答案 0 :(得分:0)
从Firefox 32开始,存储加载项数据的位置应为:[profile]/extension-data/[add-on ID]
。这是通过“Bug 915838 - Provide add-ons a standard directory to store data, settings”的决议确定的。有一个后续错误,“Bug 952304 - (JSONStore) JSON storage API for addons to use in storing data and settings”,它应该提供一个API以便于访问。
对于Addon-SDK,您可以使用以下命令获取插件ID(在 package.json 中定义):
let self = require("sdk/self");
let addonID = self.id;
对于XUL和无重新启动扩展,您应该能够使用以下命令获取插件的ID(您在 install.rdf 文件中定义):
Components.utils.import("resource://gre/modules/Services.jsm");
let addonID = Services.appInfo.ID
然后,您可以执行以下操作为该目录中的文件生成URI:
userProfileDirectoryPath = Components.classes["@mozilla.org/file/directory_service;1"]
.getService( Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsIFile).path,
/**
* Generate URI for a filename in the extension's data directory under the preferences
* directory.
*/
function generateURIForFileInPrefExtensionDataDirectory (fileName) {
//Account for the path separator being OS dependent
let toReturn = "file://" + userProfileDirectoryPath.replace(/\\/g,"/");
return toReturn +"/extension-data/" + addonID + "/" + fileName;
}
}
对象myExtension.addonData
是我存储在Bootstrap data中的入口点的bootstrap.js的副本。