2016-11-12 39 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。我相信這是實現它的唯一方法(並因此被接受的答案),但對我的需求來說是過度的。我會保持原樣(使用子菜單版本)。 –