2016-11-12 37 views
0

如果它们重叠,是否有排除上下文菜单类型之一的方法?
例如:
我有两个上下文项目,可编辑选择
在状况时这两个类型的匹配,(内部编辑选择)chrome.contextMenus排除类型

enter image description here

铬给出了两个动作子菜单。
我想只有一个。
在这种特定情况下,我如何区分或排除其中一种类型?

+2

将两者合并为一个'chrome.contextMenus.create'调用时,只显示一个菜单项。这对你来说是一种选择吗? –

+0

@RobW不,不幸的是我需要为这两个人采取不同的行动。只有在它们重叠的情况下,我想**使注意**优先http://prntscr.com/d6gc24 –

回答

1

如果菜单项类型相同(即相同类型,类型等),则可以声明上下文菜单并指定多个上下文。然后,如果任何上下文匹配,菜单项将显示。

你说不过你确实需要单独的上下文菜单声明:标题为

  • 菜单项“记”为“选择”的背景。
  • 带有“可编辑”上下文的标题“插入注释”的菜单项。
  • 当两个上下文都适用时,标题为“做笔记”的菜单项。当在输入栏中选择文本时(因此没有“插入注释”菜单项)。

contextMenus API不直接支持此用例。因此,下一个最佳选择是在第三种情况下出现上下文菜单之前删除“可编辑”的上下文菜单(并在第三种情况不再相关时恢复上下文菜单)。

在你的情况下,我会用selectionchange来检测用户(de)何时选择文本。选择文本后,检查输入字段是否在选择中(这样做可以合并Selection,Range和/或DOM(遍历)API)。如果找到输入字段,请删除所需的上下文菜单项。 无论您是否找到菜单项,都可以为键和/或鼠标事件添加侦听器,以检测用户指针是否位于输入字段上。

下面是使用selectionchangehttps://stackoverflow.com/a/13673942/938089)和Showing context menu buttons only when right-clicked on classes that start with “Story”的另一个示例。

+0

谢谢Rob。我相信这是实现它的唯一方法(并因此被接受的答案),但对我的需求来说是过度的。我会保持原样(使用子菜单版本)。 –