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

前端 未结 2 903
天命终不由人
天命终不由人 2020-12-11 04:25

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.

相关标签:
2条回答
  • 2020-12-11 04:52

    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.

    0 讨论(0)
  • 2020-12-11 05:01

    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
                });
            });
        }
    });
    
    0 讨论(0)
提交回复
热议问题