1

这是我创建右键菜单的代码:

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
    }
});
4

2 回答 2

0

每当您想创建菜单项时,都应该调用contextMenus.create. 通常,您只想在扩展初始化时创建一次菜单项。contextMenus.create每次加载网页时,您似乎都在调用。不要那样做。

您可能会调用contextMenus.create在每个页面加载时运行的某个函数。将它从该函数中取出并将其放置在某个地方,它只会在扩展的加载生命周期内运行一次。例如,contextMenus.create在后台脚本中运行,而不是在任何函数中,应该就足够了。

当然,请确保无论您将调用移动到何处,contextMenus.create回调函数仍然保持在范围内。wordObjectrunArray

于 2013-08-14T13:45:09.660 回答
0

为了扩展@apsillers 的答案,这里是一个在安装时为非持久性扩展(使用页面操作而不是浏览器操作)创建上下文菜单项的示例,取自此答案

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
    }
});
于 2016-12-05T20:30:18.693 回答