Google chrome extension 具有自定义上下文的Chrome扩展上下文菜单
我在chome扩展中创建了一个上下文菜单作为复选框,我成功地创建了一个菜单,该菜单将仅对可编辑字段可见 问题是我需要根据textfield(聚焦元素)中的数据属性将菜单显示为选中状态。在下面的代码中,它在全局级别显示checked(这意味着如果我选中了一个页面/elemebt中的菜单,其他页面/元素也将保持选中状态。) 如何根据元素的数据属性将其选中/取消选中Google chrome extension 具有自定义上下文的Chrome扩展上下文菜单,google-chrome-extension,Google Chrome Extension,我在chome扩展中创建了一个上下文菜单作为复选框,我成功地创建了一个菜单,该菜单将仅对可编辑字段可见 问题是我需要根据textfield(聚焦元素)中的数据属性将菜单显示为选中状态。在下面的代码中,它在全局级别显示checked(这意味着如果我选中了一个页面/elemebt中的菜单,其他页面/元素也将保持选中状态。) 如何根据元素的数据属性将其选中/取消选中 var addinMenu = chrome.contextMenus.create({ "title": "My Addin
var addinMenu = chrome.contextMenus.create({
"title": "My Addin Menu",
"contexts": ["editable"]
});
var disableOrEnable = chrome.contextMenus.create({
"type": "checkbox",
"title": "Disable",
"parentId": addinMenu,
"id": "myaddin_disable",
"checked": true,
"contexts": ["editable"],
"onclick": disableOrEnableMyAddin
});
当菜单属性应更改时调用,例如:
chrome.contextMenus.update(
disableOrEnable,
{ type: 'checkbox', checked: false });
看起来您可以捕获oncontextmenu
事件,并进行更改,这些更改会立即反映在已发布的菜单中(但我从Rob W的评论中看到,这可能是一个错误)。这对我很有用:
var contextMenu = chrome.contextMenus.create(
{
type: 'checkbox',
title: 'how now brown cow',
checked: false,
contexts: ['all']
});
var element = document.getElementById('hello');
element.addEventListener(
'mouseover',
function(e) {
element.setAttribute('underMouse', 'true');
});
element.addEventListener(
'mouseout',
function(e) {
element.setAttribute('underMouse', '');
});
window.oncontextmenu = function(e) {
chrome.contextMenus.update(
contextMenu,
{
type: 'checkbox',
checked: element.getAttribute('underMouse') == 'true'
});
}
如果您对当前聚焦的文本字段感兴趣,也可以在
focus
和blur
事件中更改菜单。您可能还想签出上下文
菜单属性的'editable'
选项(不确定这会起什么作用,但听起来可能会将菜单限制为文本输入元素)。这将更新所有位置的状态,而不是针对一个控件,我需要在不同的元素中显示启用/禁用。假设我在一个页面中有两个文本字段,如果选中其中一个的菜单,当我打开上下文菜单时,它不应该显示另一个的选中。我明白了。您不能捕获(或其他上下文菜单事件)并更改它吗?我不确定它是否会在菜单已经显示时更新。似乎没有进入/离开事件,只有一个钩子在执行操作后可用。在Firefox中,我们可以编写自己的上下文来显示菜单。相关:(该示例使用类名,但调整代码以使用数据属性应该不会太难)谢谢,我将尝试调整这个,并让您知道。