Расширение контекстного меню Chrome, как отображать пункт меню только при отсутствии выбора? - PullRequest
8 голосов
/ 17 июня 2011

Что я хочу сделать:

, если пользователь ничего не выбирает, отобразить пункт меню 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 ]

7 голосов
/ 17 июня 2011

Вам необходимо внедрить скрипт содержимого на каждую страницу, который проверял бы событие 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
            });
        });
    }
});
0 голосов
/ 08 июня 2014

Возможно, это была ошибка или функциональность была другой, когда ОП изначально задавал вопрос (17 июня 2011 г.); но сегодня код ОП работает точно так, как и ожидалось, просто используя contexts параметры в ее chrome.contextMenus.create() вызовах, именно так, как она его написала.

...