首页 > 解决方案 > Thunderbird 78+:Thunderbird 插件中未定义的 Components.classes

问题描述

美好的一天,我正在开发一个 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;
 }

标签: mozillathunderbirdthunderbird-addonthunderbird-webextensions

解决方案


*在 2017 年 11 月发布的 Firefox 57 中删除了对使用 XUL/XPCOM 或插件 SDK 的扩展的支持。使用本文档中描述的技术的插件被视为 Firefox 中的遗留技术。不要使用这些技术来开发新的附加组件。请改用 WebExtensions。* nsIMsgAccountManager是一个 XPCOM 对象,因此 Thunderbird 78 不再支持它,而不是使用 XPCOM 对象应该使用 WebExtensions API。有一个名为accounts的webextension 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


推荐阅读