【问题标题】:Thunderbird 78+:Undefined Components.classes in thunderbird addonThunderbird 78+:Thunderbird 插件中未定义的 Components.classes
【发布时间】:2021-02-22 01:36:44
【问题描述】:

美好的一天,我正在开发一个 mozilla 雷鸟插件,并希望使用组件类。我知道当前版本的雷鸟现在是 78+,所以我应该使用 HTML 而不是 XUL,然后从那里使用 javascripts 以及 Web 扩展 API。我知道我需要使用nsIMsgAccountManager 来获取电子邮件,但我无法让它在 javascript 中工作。我总是收到错误 TypeError : Components.classes is undefined 有人可以帮我吗?我的 javascript 在下面。

function populateAccounts() {
 var emails;
   try {
   var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
   var accounts = acctMgr.accounts;
     if (accounts.queryElementAt) {
       // Gecko 17+
       for (var i = 0; i < accounts.length; i++) {
         var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
         emails += account.key;
       }
     } else {
       // Gecko < 17
       for (var i = 0; i < accounts.Count(); i++) {
         var account = accounts.QueryElementAt(i, Components.interfaces.nsIMsgAccount);
         emails += account.key;
       }
     }
   } catch (e) {
   console.log(e);
   emails = e;
   }
 return emails;
 }

【问题讨论】:

    标签: mozilla thunderbird thunderbird-addon thunderbird-webextensions


    【解决方案1】:

    *在 2017 年 11 月发布的 Firefox 57 中删除了对使用 XUL/XPCOM 或插件 SDK 的扩展的支持。使用本文档中描述的技术的插件被视为 Firefox 中的遗留技术。不要使用这些技术来开发新的附加组件。请改用 WebExtensions。 * nsIMsgAccountManager 是一个 XPCOM 对象,因此 Thunderbird 78 不再支持它,而应使用 XPCOM 对象 WebExtensions API。有一个名为 accounts 的网络扩展 API,它返回一个 promise,可用于获取用户帐户的信息,包括电子邮件。

    有关XPCOM的更多信息,请打开下面的链接

    https://developer.mozilla.org/en-US/docs/Archive/Mozilla/XUL/Tutorial/XPCOM_Interfaces

    有关 Thunderbird Web Extensions API 的更多信息,请打开下面的链接

    https://developer.thunderbird.net/add-ons/mailextensions

    https://thunderbird-webextensions.readthedocs.io/en/78/

    有关 Promise 的更多信息,请打开下面的链接

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

    【讨论】:

    • 技术上可以通过所谓的“实验”附加组件访问遗留组件,但如果从 Thunderbird 中删除这些组件,将来损坏的风险会增加。我只是为了完整性而提到这一点,但不建议将旧部件用于新的附加组件。正如您所描述的,WebExtensions 应该受到青睐。
    猜你喜欢
    • 2011-04-01
    • 2021-01-17
    • 2021-01-04
    • 2018-12-07
    • 1970-01-01
    • 2019-05-04
    • 2014-03-21
    • 2012-04-02
    • 2021-02-24
    相关资源
    最近更新 更多