Firefox addon 从Firefox加载项保存文件的位置?

Firefox addon 从Firefox加载项保存文件的位置?,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我正在开发一个Firefox插件,其中包括生成供插件使用的网站缩略图。到目前为止,我一直使用简单的存储方式,通过它们的图像数据URL来存储它们。这有两个问题:存储空间有限,发送很长的字符串似乎不是最优的(我假设浏览器已经优化了加载图像文件的方式,但可能没有数据URL)。我认为将文件保存到磁盘应该没有问题,但问题是在哪里。我在谷歌上搜索了很久,什么也没找到。这里有天然的地方吗?是否有任何限制?截至,您的加载项的数据存储位置应为:[profile]/extension data/[add-on ID

我正在开发一个Firefox插件,其中包括生成供插件使用的网站缩略图。到目前为止,我一直使用简单的存储方式,通过它们的图像数据URL来存储它们。这有两个问题:存储空间有限,发送很长的字符串似乎不是最优的(我假设浏览器已经优化了加载图像文件的方式,但可能没有数据URL)。我认为将文件保存到磁盘应该没有问题,但问题是在哪里。我在谷歌上搜索了很久,什么也没找到。这里有天然的地方吗?是否有任何限制?

截至,您的加载项的数据存储位置应为:
[profile]/extension data/[add-on ID]
。这是由“”的决议确立的。还有一个后续的bug“,”应该提供一个易于访问的API

对于插件SDK,您可以通过以下方式获得插件ID(在package.json中定义):

对于XUL和restartless扩展,您应该能够通过以下方式获取插件的ID(您在install.rdf文件中定义了该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
是我存储提供给入口点的数据的副本。

简单存储保存到
{fx_profile_folder}/jetpack/{your_addon_id}/simplete stroage/something.json>中,因此您最好也将内容保存到同一文件夹中,因为卸载您的加载项后,该文件夹会被删除,这很好,因为你不想在卸载后在你的用户计算机上留下痕迹。或者不:审阅者/任何人真的关心文件的最终位置吗?我见过加载项将文件保存到类似{fx\u profile\u folder}/{your\u addon\u id}的东西中。实际上,我可以在自己完成后挂接到shutdown()并进行清理,所以这应该不是一个问题……很好的发现,我在卸载时手动删除了我的文件。把它存放在任何地方,我说卸载时就把它清理干净。
Components.utils.import("resource://gre/modules/Services.jsm");
let addonID = Services.appInfo.ID
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;
    }
}