You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thunderbird WebExtension背景脚本无法识别gFolderDisplay问题咨询

问题根源:运行上下文的隔离性

你碰到的核心问题就是WebExtension背景脚本和Thunderbird Scratchpad的运行环境完全不同:

  • Scratchpad是直接在Thunderbird的主UI进程上下文里执行的,相当于直接潜入了Thunderbird内部运行环境,所以能直接访问gFolderDisplay这种Thunderbird内部的全局变量。
  • 但WebExtension的背景脚本是运行在隔离的沙盒环境里的,为了安全性,它无法直接访问Thunderbird的内部DOM、全局变量或者非WebExtension API的内部对象。gFolderDisplay和browser.gFolderDisplay都不属于WebExtension标准API的一部分,所以背景脚本里根本找不到这些变量。
正确解决方案:使用Thunderbird WebExtension官方API

要获取选中的邮件数量,你需要用Thunderbird专门为WebExtension提供的mailTabs API,具体是browser.mailTabs.getSelectedMessages()方法,它能返回当前邮件标签页中选中的邮件数组,数组的长度就是你要的选中数量。

修改后的代码示例

background.js

function test_some_stuff() {
  // 获取当前活跃的邮件标签页,然后获取选中的消息
  browser.mailTabs.getCurrent()
    .then(tab => browser.mailTabs.getSelectedMessages(tab.id))
    .then(selectedMessages => {
      console.log("Selected Mails:" + selectedMessages.length);
    })
    .catch(err => {
      console.error("获取选中邮件失败:", err);
    });
}

browser.browserAction.onClicked.addListener(test_some_stuff);

确认权限

你的manifest.json已经包含了messagesRead权限,这刚好是使用getSelectedMessages需要的权限,所以不需要额外添加权限,保持现有配置即可。

补充说明:为什么按钮其他功能正常?

因为browser.browserAction.onClicked和打开新标签这类API(比如browser.tabs.create)都是WebExtension标准支持的API,所以能在背景脚本里正常工作;而gFolderDisplay属于Thunderbird内部私有变量,不在WebExtension的权限访问范围内,自然无法调用。

内容的提问来源于stack exchange,提问作者suedtirolli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:08