This site will have limited functionality while we undergo maintenance to improve your experience. If an article doesn't solve your issue and you want to ask a question, we have our support community waiting to help you at @FirefoxSupport on Twitter and/r/firefox on Reddit.

ค้นหาฝ่ายสนับสนุน

Avoid support scams. We will never ask you to call or text a phone number or share personal information. Please report suspicious activity using the “Report Abuse” option.

เรียนรู้เพิ่มเติม

Experiment API to save a text file

  • 2 การตอบกลับ
  • 0 คนมีปัญหานี้
  • 10 ครั้งที่ดู
  • ตอบกลับล่าสุดโดย richard344

more options

I'm trying to write a Thunderbird add-on that allows me to export specific messages to some other custom-built software by saving in a specific local folder. I've written an add-on and included an experiment API because I understand that saving a file isn't possible through the built in APIs. I've lifted much of the code from other places and stitched it together. Everything works apart from the implementation of the API (which of course is the difficult bit)

My problem is that I think I need to use IOUtils but can't seem to get this to load. Has this been deprecated?

My experiment API implementation file currently looks like the following and it's the line: XPCOMUtils.defineLazyGlobalGetters(this, ["IOUtils"]); that seems to be causing it to fail

"use strict";

// Using a closure to not leak anything but the API to the outside world. (function (exports) {

 // Get various parts of the WebExtension framework that we need.
 var { ExtensionCommon } = ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm");
 // You probably already know what this does.
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 // A helpful class for listening to windows opening and closing.
 var { ExtensionSupport } = ChromeUtils.import("resource:///modules/ExtensionSupport.jsm");
 var { FileUtils }       = ChromeUtils.import("resource://gre/modules/FileUtils.jsm");
 var { XPCOMUtils }      = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 XPCOMUtils.defineLazyGlobalGetters(this, ["IOUtils"]);
 
 var ContactAPI = class extends ExtensionCommon.ExtensionAPI {
   getAPI(context) {
     return {
       ContactAPI: {
         saveTextFile: async function(fname, mydata) {
           var uint8 = new Uint8Array(mydata);
           uint8.reduce((binary, uint8) => binary + uint8.toString(2), "");
           Services.wm.getMostRecentWindow("mail:3pane").alert(mydata);
           var ret = await IOUtils.write(fname, uint8);
           return ret;
         },
       },
     };
   }
   onShutdown(isAppShutdown) {
     // This function is called if the extension is disabled or removed, or Thunderbird closes.
     // We usually do not have to do any cleanup, if Thunderbird is shutting down entirely
     if (isAppShutdown) {
       return;
     }
     console.log("Goodbye world!");
   }
 };
 // Export the api by assigning in to the exports parameter of the anonymous closure
 // function, which is the global this.
 exports.ContactAPI = ContactAPI;

})(this)

I'm trying to write a Thunderbird add-on that allows me to export specific messages to some other custom-built software by saving in a specific local folder. I've written an add-on and included an experiment API because I understand that saving a file isn't possible through the built in APIs. I've lifted much of the code from other places and stitched it together. Everything works apart from the implementation of the API (which of course is the difficult bit) My problem is that I think I need to use IOUtils but can't seem to get this to load. Has this been deprecated? My experiment API implementation file currently looks like the following and it's the line: XPCOMUtils.defineLazyGlobalGetters(this, ["IOUtils"]); that seems to be causing it to fail "use strict"; // Using a closure to not leak anything but the API to the outside world. (function (exports) { // Get various parts of the WebExtension framework that we need. var { ExtensionCommon } = ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm"); // You probably already know what this does. var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); // A helpful class for listening to windows opening and closing. var { ExtensionSupport } = ChromeUtils.import("resource:///modules/ExtensionSupport.jsm"); var { FileUtils } = ChromeUtils.import("resource://gre/modules/FileUtils.jsm"); var { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyGlobalGetters(this, ["IOUtils"]); var ContactAPI = class extends ExtensionCommon.ExtensionAPI { getAPI(context) { return { ContactAPI: { saveTextFile: async function(fname, mydata) { var uint8 = new Uint8Array(mydata); uint8.reduce((binary, uint8) => binary + uint8.toString(2), ""); Services.wm.getMostRecentWindow("mail:3pane").alert(mydata); var ret = await IOUtils.write(fname, uint8); return ret; }, }, }; } onShutdown(isAppShutdown) { // This function is called if the extension is disabled or removed, or Thunderbird closes. // We usually do not have to do any cleanup, if Thunderbird is shutting down entirely if (isAppShutdown) { return; } console.log("Goodbye world!"); } }; // Export the api by assigning in to the exports parameter of the anonymous closure // function, which is the global this. exports.ContactAPI = ContactAPI; })(this)

การตอบกลับทั้งหมด (2)

more options

I am not even going to try and help you with the actual issue as I am not a developer of anything these days. I suggest you try asking in the addon developers mailing list where add on developers and even some of the paid folks can be found. https://thunderbird.topicbox.com/groups/addons

Expe4iments are not going to be supported going forward is my understanding, so getting involved with the lest is a must I think.

Perhaps this thread might be related enough to offer some ideas. https://thunderbird.topicbox.com/groups/addons/Ta1ba6e8a2d5a27a3/lazy-loading-alternative-for-getfull-when-using-the-messages-api

more options

Thanks will try those suggestions