javascript - Firefox AddOn 扩展中 contextMenu 选项的可见性
问题描述
我正在编写我的第一个 Firefox 附加扩展,它主要通过文本框上的右键单击上下文菜单工作。
我希望能够根据用户在其上执行右键单击事件的文本框中当前是否选择了任何文本来显示/隐藏单个选项。
我已经能够使用内容脚本和背景脚本之间的消息来了解它的基础知识......
content.js...
window.oncontextmenu = function(e) {
if (e && e.target && (e.target.nodeName == "TEXTAREA" || (e.target.nodeName == "INPUT" && e.target.type == "text"))) {
var selectedText = "";
if (e.target.selectionStart < e.target.selectionEnd) {
selectedText = e.target.value.substring(e.target.selectionStart, e.target.selectionEnd);
}
browser.runtime.sendMessage({ "action": "additemvisible", "selectedText": selectedText});
}
};
background.js...
browser.runtime.onMessage.addListener(function(message) {
if (message && message.action) {
if (message.action == "additemvisible") {
addSelectedText = message.selectedText;
browser.menus.update("addtextitem", { visible: addSelectedText != "" });
}
}
});
问题是在显示上下文菜单后,消息似乎通过了 background.js 脚本,因此菜单项的可见性基于先前的状态,而不是当前状态。
有没有更好的方法来编写这个,以便 contextMenu 项目根据当前情况可见?
解决方案
contexts
您可以使用该属性设置何时显示上下文菜单项。在您的情况下,您似乎对网页上的选定文本感兴趣,有selected
上下文(可以在此处找到完整的上下文列表)。
单击菜单项时,所选文本将发送到菜单项的单击侦听器,这是一个示例:
browser.contextMenus.create({
id: "log-selection",
title: "Process Selection",
contexts: ["selection"],
onclick: (info, tab) => {
console.log(info.selectionText);
}
});
推荐阅读
- python - 返回 None 类型值的函数
- python - 将多表excel工作簿拆分为多个工作簿
- c - 中断未触发。关于为什么会这样的任何想法?
- vb.net - 如何创建一个不断更新的文本框,在添加项目后立即显示更新的小计?
- r - strsplit:从整数中拆分字符串
- xslt - 如何使用 xslt 转换为制表符分隔的文本文件
- r - 如何将多个嵌套的 XML 元素转换为数据框?
- flutter - 颤振二级动画未运行
- go - 使用缓冲区作为输出时,压缩文件夹已损坏
- python - 为什么 0.24.2 版中没有关于 pandas.MultiIndex.map 的文档?它与 pandas.Index.map 有关吗?