Firefox扩展:右键点击前根据选中文本更新上下文菜单标题
Firefox扩展上下文菜单动态切换标题实现方案
核心问题分析
你当前代码的问题在于:
- 未定义
isNullOrWhitespace判断函数 - 错误使用普通鼠标事件而非扩展专属的菜单触发事件,无法正确获取包含选中文本的
info上下文对象 - 缺少菜单刷新步骤,配置更新后无法立即生效
正确实现代码
- 实现空白文本判断函数
function isNullOrWhitespace(str) { return !str || str.trim().length === 0; }
- 监听菜单显示前事件,动态更新标题
// 扩展启动时先创建基础菜单项(若未创建) browser.menus.create({ id: "translate-page", title: "Translate Page", // 默认标题 contexts: ["page", "selection"] // 确保在页面和选中文本场景下都显示 }); // 监听菜单显示事件,在弹出前更新标题 browser.menus.onShown.addListener((info) => { const newTitle = isNullOrWhitespace(info.selectionText) ? "Translate Page" : "Translate Text"; browser.menus.update("translate-page", { title: newTitle }); // 调用refresh让更新在本次菜单弹出时生效 browser.menus.refresh(); });
关键说明
- 使用
browser.menus.onShown事件:这是Firefox扩展专门用于上下文菜单显示前的回调,能直接获取包含selectionText的上下文信息对象 - 调用
browser.menus.refresh():更新菜单项配置后必须调用此方法,才能让新标题在当前弹出的菜单中生效 - 菜单上下文设置:
contexts同时包含page和selection,保证无论是否选中文本,菜单项都能正常显示
内容的提问来源于stack exchange,提问作者Hellboy.
相关产品推荐
相关产品推荐

