如何获取浏览器操作(browser action)上下文菜单项点击时的鼠标x、y坐标
Firefox扩展工具栏右键菜单坐标获取方案
可以通过Firefox WebExtension的browser.menus原生API直接拿到右键点击的屏幕坐标,无需额外权限,实现逻辑如下:
核心实现原理
browser.menus.onClicked事件的第一个回调参数info,会自带右键点击发生位置的screenX、screenY属性,这两个值就是你右键点击工具栏按钮时的精确屏幕坐标,直接用来计算弹窗定位即可。
示例代码
// 注册工具栏按钮右键菜单项,Manifest V3版本将contexts改为["action"]即可 browser.menus.create({ id: "open-custom-popup", title: "打开扩展弹窗", contexts: ["browser_action"] }); // 监听菜单项点击事件 browser.menus.onClicked.addListener(async (info, tab) => { if (info.menuItemId !== "open-custom-popup") return; // 直接取右键点击的屏幕坐标 const clickX = info.screenX; const clickY = info.screenY; // 自定义弹窗尺寸 const POPUP_WIDTH = 320; const POPUP_HEIGHT = 450; // 计算定位,可自行调整偏移值适配按钮对齐效果 const popupLeft = clickX - POPUP_WIDTH / 2; const popupTop = clickY + 8; // 打开定位后的独立弹窗 await browser.windows.create({ url: "popup.html", // 替换为你的扩展页面路径 type: "popup", width: POPUP_WIDTH, height: POPUP_HEIGHT, left: Math.max(0, popupLeft), // 避免弹窗超出屏幕左边界 top: Math.max(0, popupTop) // 避免弹窗超出屏幕上边界 }); });
注意事项
- 如果设备开启了系统显示缩放,坐标可能存在微小偏移,可通过
browser.windows.get获取当前窗口的缩放比例做适配,普通场景下无需额外处理。 - 代码中加入了边界判断,避免弹窗定位到屏幕可视区域外。
内容的提问来源于stack exchange,提问作者user17148512
相关产品推荐
相关产品推荐

