Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!