这是我创建右键菜单的代码:
chrome.contextMenus.create({
title: "copy '%s' to clipboard",
contexts: ["selection"],
onclick: function(info) {
wordObject[wordObject.length] = {
word: info.selectionText,
definition: " 'add definition' "
};
runArray();
chrome.storage.sync.set({"myValue": wordObject});
}
});
问题在于每次刷新页面时都会创建菜单下的其他选项。
修改
我有点修复它,但每次点击都需要刷新页面。有什么方法吗?
chrome.contextMenus.create({
title: "copy '%s' to clipboard",
contexts: ["selection"],
onclick: function(info) {
wordObject[wordObject.length] = {
word: info.selectionText,
definition: " 'add definition' "
};
runArray();
chrome.storage.sync.set({"myValue": wordObject});
chrome.contextMenus.removeAll();
location.reload(); // Refreshes page! Probably not good
}
});
答案 0 :(得分:0)
每当您想要创建菜单项时,您应该只对contextMenus.create
进行一次调用。通常,您只想在初始化扩展时创建一次菜单项。每次加载网页时,您似乎都在调用contextMenus.create
。不要那样做。
您可能会在每个页面加载的某个函数内调用contextMenus.create
。将它从该函数中取出并将其放置在仅为扩展的加载生命周期运行一次的地方。例如,在后台脚本中运行contextMenus.create
,而不是在任何函数内运行,应该就足够了。
当然,请确保将呼叫转移到contextMenus.create
的任何地方,回调功能仍会将wordObject
和runArray
保留在范围内。
答案 1 :(得分:0)
扩展@ apsillers'回答,这是一个在安装时为非持久性扩展(使用页面操作而不是浏览器操作)创建上下文菜单项的示例,取自this answer:
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({
title: 'My menu',
id: 'menu1', // you'll use this in the handler function to identify this context menu item
contexts: ['all'],
});
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId === "menu1") { // here's where you'll need the ID
// do something
}
});