#javascript #google-chrome #google-chrome-extension #contextmenu
#javascript #google-chrome #google-chrome-extension #contextmenu
Вопрос:
Вот пример того, что я хотел бы сделать, это было упрощено для целей публикации здесь. Я хотел бы добавить несколько пунктов контекстного меню, которые фактически вызывают одну и ту же функцию, а затем внутри функции я хотел бы иметь возможность различать, какая из них была вызвана, и действовать соответственно.
В этом примере добавлены два пункта контекстного меню, один для сокращения ссылки с bit.ly
и один для использования tinyURL
.
chrome.contextMenus.create({'title': 'Shorten with bit.ly',
'contexts': ['all'],
'onclick': shortenLink});
chrome.contextMenus.create({'title': 'Shorten with tinyURL',
'contexts': ['all'],
'onclick': shortenLink});
Принимающая функция выглядит примерно так, и по умолчанию оба info
и tab
отправляются вместе с запросом, но я не думаю, что смогу выяснить, какое контекстное меню вызвало функцию только из этого.
function shortenLink(info, tab){
}
Вот консольный дамп этих двух переменных:
Я знаю, что могу настроить отдельные функции для каждого элемента, но есть много элементов контекстного меню, которые я хочу добавить, и все они используют много одного и того же кода, поэтому мне бы очень хотелось иметь только одну функцию «отправки», которую они все используют. Как я могу это сделать?
Редактировать
Возможно, я смогу выяснить, из какого пункта меню она была вызвана, используя menuItemId
переменную, но могу ли я передать дополнительный параметр или некоторые дополнительные данные, такие как {method:'bitly'}
?
Ответ №1:
chrome.contextMenus.create({'title': 'Shorten with bit.ly',
'contexts': ['all'],
'onclick': function(info, tab) {
shortenLink(info, tab, {method:'bitly'});
});
function shortenLink(info, tab, methodObj){
...
}