6

chrome.contextMenus 只有四种方法:

create
update
remove
removeAll

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

我试过这个:

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

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

感谢您提供任何提示!

4

2 回答 2

3

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

于 2012-12-06T15:56:12.437 回答
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];
}
于 2019-01-10T10:30:52.787 回答