chrome.contextMenus只有四种方法:
create
update
remove
removeAll
我想知道如何检查是否已创建一个菜单?
我试过了:
try {
chrome.contextMenus.update("byname", {});
} catch (e) {
// doesn't exist
}
但似乎无法捕获错误(但在控制台中显示)。
感谢任何提示!
答案 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];
}