Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

226
Vistas
¿Cómo ejecutar/acceder al archivo local desde Thunderbird WebExtension?

Me gusta escribir un complemento de Thunderbird que cifre cosas. Para esto, ya extraje todos los datos de la ventana de redacción. Ahora tengo que guardar esto en archivos y ejecutar un ejecutable local para el cifrado. Pero no encontré forma de guardar los archivos y ejecutar un ejecutable en la máquina local. ¿Cómo puedo hacer eso?

Encontré la documentación de la API de entradas de archivos y directorios , pero parece que no funciona. Siempre me queda indefinido al intentar obtener el objeto con este código:

 var filesystem = FileSystemEntry.filesystem; console.log(filesystem); // --> undefined

Al menos, ¿hay un complemento que funcione que pueda examinar para averiguar cómo funciona y quizás qué permisos debo solicitar en manifest.json?

NOTA: Debe funcionar multiplataforma (Windows y Linux).

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La respuesta es que WebExtensions actualmente no puede ejecutar archivos locales. Además, tampoco es posible guardar en alguna carpeta local del disco.

En su lugar, debe agregar algún Experimento de WebExtension a su proyecto y allí usar las API heredadas. Allí puede usar las extensiones IOUtils y FileUtils para alcanzar su objetivo:

Ejecutar un archivo:

En su archivo JS de fondo:

 var ret = await browser.experiment.execute("/usr/bin/executable", [ "-v" ]);

En el experimento puedes ejecutar así:

 var { ExtensionCommon } = ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm"); var { FileUtils } = ChromeUtils.import("resource://gre/modules/FileUtils.jsm"); var { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyGlobalGetters(this, ["IOUtils"); async execute(executable, arrParams) { var fileExists = await IOUtils.exists(executable); if (!fileExists) { Services.wm.getMostRecentWindow("mail:3pane") .alert("Executable [" + executable + "] not found!"); return false; } var progPath = new FileUtils.File(executable); let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(progPath); process.startHidden = false; process.noShell = true; process.run(true, arrParams, arrParams.length); return true; },

Guardar un archivo adjunto en el disco:

En su archivo JS de fondo, puede hacer esto:

 var f = messenger.compose.getAttachmentFile(attachment.id) var blob = await f.arrayBuffer(); var t = await browser.experiment.writeFileBinary(tempFile, blob);

En el experimento, puede escribir el archivo de esta manera:

 async writeFileBinary(filename, data) { // first we need to convert the arrayBuffer to some Uint8Array var uint8 = new Uint8Array(data); uint8.reduce((binary, uint8) => binary + uint8.toString(2), ""); // then we can save it var ret = await IOUtils.write(filename, uint8); return ret; },

Documentación de IOUtils :

https://searchfox.org/mozilla-central/source/dom/chrome-webidl/IOUtils.webidl

Documentación de FileUtils :

https://searchfox.org/mozilla-central/source/toolkit/modules/FileUtils.jsm

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda