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 } |
但似乎无法捕获错误(但显示在控制台中)。
感谢您的任何提示!
每个
根据 Rob W 的建议,这是针对任何遇到操作问题的人的直接解决方案。其想法是维护您自己的现有上下文菜单 ID 列表。
通过使用这些package函数来维护上下文菜单条目,还可以跟踪删除和更新(针对 Fuzzyma 的评论)。
用法与 Chrome 自己的方法类似,例如。
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]; } |