首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跟踪我的Chrome扩展是否已经创建了上下文菜单项?

如何跟踪我的Chrome扩展是否已经创建了上下文菜单项?
EN

Stack Overflow用户
提问于 2012-12-06 23:51:28
回答 2查看 1.6K关注 0票数 6

Chrome.contextMenus只有四种方法:

代码语言:javascript
复制
create
update
remove
removeAll

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

我试过这个:

代码语言:javascript
复制
try {
  chrome.contextMenus.update("byname", {});
} catch (e) {
 // doesn't exist
}

但是错误似乎不能被捕获(但在控制台中显示)。

谢谢你的各种建议!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 23:56:12

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

票数 3
EN

Stack Overflow用户

发布于 2019-01-10 18:30:53

基于Rob W.的建议,这是对任何有op问题的人的直接解决方案。这个想法是维护您自己的现有上下文菜单id列表。

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

用法就像Chrome自己的方法一样,例如。createContextMenu({id: "something"}, onclick)。这对我很管用。

代码语言:javascript
复制
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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13747374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档