Расширение и контекстные меню Google Chrome: Как использовать одну функцию для нескольких целей?

#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){


}
  

Вот консольный дамп этих двух переменных:

Изображение.png

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

Редактировать

Возможно, я смогу выяснить, из какого пункта меню она была вызвана, используя 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){
    ...
}