在为 Chrome 开发基于上下文菜单的扩展时,我面临这样一种情况,即chrome.contextMenus.onClicked.addListener
在循环中调用会为每个子上下文菜单项累积添加操作。
因此,当单击子上下文菜单时,它会触发所有子上下文菜单的事件侦听器,而不是被单击的上下文菜单。
var parent;
chrome.runtime.onInstalled.addListener(() => {
parent = chrome.contextMenus.create({"title": "CCM", "id":"CCM", "contexts":["selection"]});
});
Object.keys(msgs).forEach(function(key) {
chrome.runtime.onInstalled.addListener(() => {
var createCM = chrome.contextMenus.create(
{"title": "subcontextmenu"+key, "id":"scm"+key, "parentId": parent, "contexts":["selection"]});
});
chrome.contextMenus.onClicked.addListener(function(info,tab){openAction(info,tab,JSON.stringify(msgs[key]['msg']));}
);
});
在上面的示例中,msgs
是一个 JSON 对象,其中包含单击每个子上下文菜单时要显示的消息。此外,msgs
JSON 上下文必然会动态变化。因此,我们无法调整openAction
以硬编码数字并关联消息。
希望我的问题很清楚。消除这种困惑的任何帮助对我来说都是一个很好的节省时间。