mozilla - 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;
}
解决方案
*在 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
推荐阅读
- bash - Web 应用程序健康检查
- php - CSS 路径在 gulp 和下划线之间没有对齐
- regex - 使用正则表达式在`helm helper template`中提取字符串
- azure - 无法连接到本地 Azure 存储帐户
- asp.net - 如何将模型从控制器传递到布局页面
- python - 如何将条件聚合应用于系列?
- python-3.x - 我使用 sklearn 进行语言识别的数据集有问题吗?
- html - 如何在可滚动div的顶部和底部获得褪色阴影,或者隐藏在它们各自的末端
- python - 使用rest api在谷歌驱动器中创建新文件夹
- html - 如何更改网站不同位置的背景颜色?