chrome extension context menus, how to display a menu item only when there is no selection?

可紊 提交于 2019-12-28 22:05:13

问题


What I want to do is:

if the user does not select anything, display menu item A;

if the user selects something, display menu item B.

So far what I can get is:

if the user does not select anything, display menu item A;

if the user selects something, display both A and B.

I want to know:

how to make item A disappear when there is selection?

Many thanks!

Below is my code:

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

var selection = chrome.contextMenus.create
({
    "title": "B",
    "contexts":["selection"],
    "onclick": doB
});

回答1:


You would need to inject a content script to every page which would check on mousedown event (before menu is displayed) whether or not there is a selection on the page, and then would send a command to a background page to create according menu items.

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



回答2:


Perhaps this was a bug or the functionality was different back when the OP originally asked the question (jun 17, 2011); but today, the OP's code works exactly as expected by simply using contexts parameters in her chrome.contextMenus.create() calls, exactly as she has it written.



来源:https://stackoverflow.com/questions/6382467/chrome-extension-context-menus-how-to-display-a-menu-item-only-when-there-is-no

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!