chrome.contextMenus 只有四种方法:
create
update
remove
removeAll
我想知道如何检查是否已经创建了一个菜单?
我试过这个:
try {
chrome.contextMenus.update("byname", {});
} catch (e) {
// doesn't exist
}
但似乎无法捕获错误(但显示在控制台中)。
感谢您提供任何提示!
chrome.contextMenus 只有四种方法:
create
update
remove
removeAll
我想知道如何检查是否已经创建了一个菜单?
我试过这个:
try {
chrome.contextMenus.update("byname", {});
} catch (e) {
// doesn't exist
}
但似乎无法捕获错误(但显示在控制台中)。
感谢您提供任何提示!
每个chrome.contextMenus.create
调用都返回一个唯一标识符。将这些标识符存储在数组或散列中以跟踪它们。
根据 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];
}