Necesito obtener la ruta del directorio de extensión instalado desde JavaScript.Cómo determinar el directorio de la extensión
Mi objetivo es escribir en un archivo JSON dentro del directorio de extensión desde una extensión de Firefox. Para hacer eso, necesito determinar el directorio en el que está instalada la extensión dentro del perfil de Firefox.
utilizo este código:
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();
Se lanza el siguiente error:
TypeError:Components.classes['@mozilla.org/extensions/manager;1'] is undefined.
que esencialmente tiene que conseguir el camino de la extensión automática de JavaScript. Comprobé la identificación de mi extensión y también intenté escribir en archivos de otras extensiones sin suerte.
Muchas gracias por sus respuestas. No me permitió resolver mi problema al instante de todos modos, pero me obligó a leer la documentación de Mozilla. Finalmente entendí cómo funciona. Gracias de nuevo.
solución a la pregunta anterior:
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();
Creo que usted necesita estar seguro de que su extensión es desempaquetado con el fin de escribir archivos en su directorio de instalación. – erikvold
por lo que es posible que desee guardar el archivo en el directorio de perfil del usuario. – erikvold