Как ограничить отображение контекстных меню только для определенного выбранного текста в расширении Chrome? - PullRequest
6 голосов
/ 19 января 2011

Я сделал очень простое расширение chrome , которое позволяет пользователям выделять номер DOI, щелкнуть правой кнопкой мыши и выбрать «Resolve DOI», и оно отправляет их на соответствующую веб-страницу. Прямо сейчас это делается в background.html с помощью:

chrome.contextMenus.create({
"title" : "Resolve DOI",
"type" : "normal",
"contexts" : ["selection"],
"onclick" : getClickHandler()
});

Я бы хотел, чтобы опция контекстного меню отображалась только в том случае, если выделенный текст начинается с «10». Любые предложения о том, как это сделать? Нужно ли ждать, пока модуль контекстных меню станет более продвинутым?

1 Ответ

10 голосов
/ 19 января 2011

Вам потребуется управлять созданием меню контента из скрипта контента.Динамическое создание / удаление меню должно выполняться довольно быстро, и задержка будет незаметна для пользователя.

  • Добавьте прослушиватель событий mousedown в скрипт содержимого и проверьте, удовлетворяет ли выбор вашему шаблону.
  • В зависимости от того, соответствует ли выбор шаблону, отправьте запрос на фоновую страницу с просьбой создать или удалить меню.

Что-то в этом духе (не проверено):

content_script.js:

document.addEventListener("mousedown", function(event){
    var selection = window.getSelection().toString();
    if(selection.match(/^10\./)) {
        chrome.extension.sendRequest({cmd: "create_menu"});
    } else {
        chrome.extension.sendRequest({cmd: "delete_menu"});
    }
}, true); 

background.html:

chrome.extension.onRequest.addListener(function(request) {
    if(request.cmd == "create_menu") {
        chrome.contextMenus.removeAll(function() {
            chrome.contextMenus.create({
                "title" : "Resolve DOI",
                "type" : "normal",
                "contexts" : ["selection"],
                "onclick" : getClickHandler()
            });
        });
    } else if(request.cmd == "delete_menu") {
        chrome.contextMenus.removeAll();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...