如何跟踪我的 Chrome 扩展程序是否已创建上下文菜单项?

How do I track whether a context menu item is already created by my Chrome Extension?

chrome.contextMenus只有四种方法:

1
2
3
4
create
update
remove
removeAll

我想知道如何检查是否已经创建了一个菜单?

我试过这个:

1
2
3
4
5
try {
  chrome.contextMenus.update("byname", {});
} catch (e) {
 // doesn't exist
}

但似乎无法捕获错误(但显示在控制台中)。

感谢您的任何提示!


每个 chrome.contextMenus.create 调用都会返回一个唯一标识符。将这些标识符存储在数组或散列中以跟踪它们。


根据 Rob W 的建议,这是针对任何遇到操作问题的人的直接解决方案。其想法是维护您自己的现有上下文菜单 ID 列表。

通过使用这些package函数来维护上下文菜单条目,还可以跟踪删除和更新(针对 Fuzzyma 的评论)。

用法与 Chrome 自己的方法类似,例如。 createContextMenu({id:"something"}, onclick)。它对我有用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let contextMenus =  {}

// method to create context menu and keep track of its existence
function createContextMenu() {
  if (arguments[0] && arguments[0].id) {
    // TODO: not sure if this will work properly, is creation synchronous or asynchrounous?
    // take in to account calll back and the runtime error?
    chrome.contextMenus[arguments[0].id] = chrome.contextMenus.create.apply(null, arguments);
  }
}

function updateContextMenu() {
  if (arguments[0] && contextMenus[arguments[0]]) {
    chrome.contextMenus.update.apply(mull, arguments);
  }

}

function removeContextMenu() {
  if (arguments[0] && contextMenus[arguments[0]]) {
    chrome.contextMenus.remove.apply(null, arguments);
    contextMenus[arguments[0]] = undefined;
  }
}

function contextMenuExists(id) {
  return !!contextMenus[id];
}