Google chrome extension chrome扩展上下文菜单,如何仅在没有选择时显示菜单项?

Google chrome extension chrome扩展上下文菜单,如何仅在没有选择时显示菜单项?,google-chrome-extension,contextmenu,Google Chrome Extension,Contextmenu,我想做的是: var all = chrome.contextMenus.create ({ "title": "A", "contexts":["page"], "onclick": doA }); var selection = chrome.contextMenus.create ({ "title": "B", "contexts":["selection"], "onclick": doB }); document.addEventL

我想做的是:

var all = chrome.contextMenus.create
({
    "title": "A",
    "contexts":["page"],
    "onclick": doA
});

var selection = chrome.contextMenus.create
({
    "title": "B",
    "contexts":["selection"],
    "onclick": doB
});
document.addEventListener("mousedown", function(event){
    //right click
    if(event.button == 2) {
        if(window.getSelection().toString()) {
            chrome.extension.sendRequest({cmd: "createSelectionMenu"});
        } else {
            chrome.extension.sendRequest({cmd: "createRegularMenu"});
        }
    }
}, true); 
如果用户未选择任何内容,则显示菜单项A

如果用户选择了某项内容,则显示菜单项B

到目前为止,我能得到的是:

var all = chrome.contextMenus.create
({
    "title": "A",
    "contexts":["page"],
    "onclick": doA
});

var selection = chrome.contextMenus.create
({
    "title": "B",
    "contexts":["selection"],
    "onclick": doB
});
document.addEventListener("mousedown", function(event){
    //right click
    if(event.button == 2) {
        if(window.getSelection().toString()) {
            chrome.extension.sendRequest({cmd: "createSelectionMenu"});
        } else {
            chrome.extension.sendRequest({cmd: "createRegularMenu"});
        }
    }
}, true); 
如果用户未选择任何内容,则显示菜单项A

如果用户选择了某个内容,则同时显示A和B

我想知道:

当有选择时,如何使项目A消失

非常感谢

下面是我的代码:

var all = chrome.contextMenus.create
({
    "title": "A",
    "contexts":["page"],
    "onclick": doA
});

var selection = chrome.contextMenus.create
({
    "title": "B",
    "contexts":["selection"],
    "onclick": doB
});
document.addEventListener("mousedown", function(event){
    //right click
    if(event.button == 2) {
        if(window.getSelection().toString()) {
            chrome.extension.sendRequest({cmd: "createSelectionMenu"});
        } else {
            chrome.extension.sendRequest({cmd: "createRegularMenu"});
        }
    }
}, true); 

您需要向每个页面注入内容脚本,以检查
mousedown
事件(在显示菜单之前)页面上是否有选择,然后向后台页面发送命令以创建相应的菜单项

content\u script.js:

var all = chrome.contextMenus.create
({
    "title": "A",
    "contexts":["page"],
    "onclick": doA
});

var selection = chrome.contextMenus.create
({
    "title": "B",
    "contexts":["selection"],
    "onclick": doB
});
document.addEventListener("mousedown", function(event){
    //right click
    if(event.button == 2) {
        if(window.getSelection().toString()) {
            chrome.extension.sendRequest({cmd: "createSelectionMenu"});
        } else {
            chrome.extension.sendRequest({cmd: "createRegularMenu"});
        }
    }
}, true); 
background.html

chrome.extension.onRequest.addListener(function(request) {
    if(request.cmd == "createSelectionMenu") {
        chrome.contextMenus.removeAll(function() {
            chrome.contextMenus.create({
                "title": "B",
                "contexts":["selection"],
                "onclick": doB
            });
        });
    } else if(request.cmd == "createRegularMenu") {
        chrome.contextMenus.removeAll(function() {
            chrome.contextMenus.create({
                "title": "A",
                "contexts":["page"],
                "onclick": doA
            });
        });
    }
});

也许这是一个bug,或者在OP最初提出这个问题时功能有所不同(2011年6月17日);但是今天,OP的代码完全按照预期工作,只需在她的
chrome.contextMenus.create()
调用中使用
contexts
参数,就像她写的那样。

谢谢。我尝试了你的代码,但没有出现上下文菜单。然后我又改回了我原来的代码,它奇迹般地按照我的意愿工作。我不明白为什么。我会在另一台电脑上试试。非常感谢你。