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
相关产品推荐
相关产品推荐

