Je dois obtenir le chemin du répertoire installé de l'extension à partir de JavaScript.Comment déterminer le répertoire de l'extension
Mon but est d'écrire dans un fichier JSON dans le répertoire d'extension à partir d'une extension Firefox. Pour ce faire, j'ai besoin de déterminer le répertoire dans lequel l'extension est installée dans le profil de Firefox.
J'utilise ce code:
function writeToFile()
{
var id = "[email protected]";// The extension's id from install.rdf(i.e. <em:id>)
var ext = Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager)
.getInstallLocation(id)
.getItemLocation(id);
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(ext.path);
file.append("config.json");
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
var data = '[ {"id" : "2"} ]';
foStream.write(data, data.length);
foStream.close();
Il jette l'erreur suivante:
TypeError:Components.classes['@mozilla.org/extensions/manager;1'] is undefined.
J'ai besoin essentiellement pour obtenir le chemin de l'extension automatiquement à partir de JavaScript. J'ai vérifié l'ID de mon extension et j'ai également essayé d'écrire dans des fichiers d'autres extensions sans succès.
Merci beaucoup pour vos réponses. Cela ne m'a pas permis de résoudre mon problème instantanément, mais cela m'a forcé à lire la documentation de Mozilla. J'ai enfin compris comment cela fonctionne. Merci encore.
solution à la question ci-dessus:
Components.utils.import("resource://gre/modules/AddonManager.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
AddonManager.getAddonByID("plugin_id", function(addon) {
var uri = addon.getResourceURI("config.json");
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
var stringUri = uri.asciiSpec;
stringUri = stringUri.replace(new RegExp(/\//g), '\\');
stringUri = stringUri.slice(8);
alert(stringUri);
file.initWithPath(stringUri);
alert(addon.hasResource("config.json"));
var stream = FileUtils.openFileOutputStream(file,
FileUtils.MODE_WRONLY
| FileUtils.MODE_CREATE
| FileUtils.MODE_TRUNCATE);
stream.write(dataToWrite, dataToWrite.length);
stream.close();
Je pense que vous devez être sûr que votre extension est décompressé afin d'écrire des fichiers, il est le répertoire d'installation. – erikvold
donc vous pouvez enregistrer le fichier dans le répertoire de profil de l'utilisateur à la place. – erikvold