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

时间:2011-06-17 07:06:58

标签: google-chrome-extension contextmenu

我想做的是:

如果用户没有选择任何内容,则显示菜单项A;

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

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

如果用户没有选择任何内容,则显示菜单项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
});

2 个答案:

答案 0 :(得分:7)

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

<强> content_script.js:

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

答案 1 :(得分:0)

当OP最初提出问题时(2011年6月17日),也许这是一个错误或功能不同;但今天,OP的代码完全符合预期,只需在contexts次调用中使用chrome.contextMenus.create()个参数,就像她写的一样。