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

时间:2012-12-06 15:51:28

标签: google-chrome-extension

chrome.contextMenus只有四种方法:

create
update
remove
removeAll

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

我试过了:

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

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

感谢任何提示!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

通过使用这些包装器功能来维护上下文菜单项,还可以跟踪删除和更新(以处理Fuzzyma的评论)。

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

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];
}