Google chrome extension 具有自定义上下文的Chrome扩展上下文菜单

Google chrome extension 具有自定义上下文的Chrome扩展上下文菜单,google-chrome-extension,Google Chrome Extension,我在chome扩展中创建了一个上下文菜单作为复选框,我成功地创建了一个菜单,该菜单将仅对可编辑字段可见 问题是我需要根据textfield(聚焦元素)中的数据属性将菜单显示为选中状态。在下面的代码中,它在全局级别显示checked(这意味着如果我选中了一个页面/elemebt中的菜单,其他页面/元素也将保持选中状态。) 如何根据元素的数据属性将其选中/取消选中 var addinMenu = chrome.contextMenus.create({ "title": "My Addin

我在chome扩展中创建了一个上下文菜单作为复选框,我成功地创建了一个菜单,该菜单将仅对可编辑字段可见

问题是我需要根据textfield(聚焦元素)中的数据属性将菜单显示为选中状态。在下面的代码中,它在全局级别显示checked(这意味着如果我选中了一个页面/elemebt中的菜单,其他页面/元素也将保持选中状态。)

如何根据元素的数据属性将其选中/取消选中

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中,我们可以编写自己的上下文来显示菜单。相关:(该示例使用类名,但调整代码以使用数据属性应该不会太难)谢谢,我将尝试调整这个,并让您知道。