Расширение и контекстные меню Google Chrome: как использовать одну функцию для нескольких целей? - PullRequest
1 голос
/ 11 октября 2011

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

Этот пример добавляетдва элемента контекстного меню, один для сокращения ссылки с 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){


}

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

Picture.png http://img198.imageshack.us/img198/354/picturedw.png

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

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

Возможно, я смогу выяснить, из какого пункта меню он вызывался, используя переменную menuItemId, но могу ли я передатьдополнительный параметр или некоторые дополнительные данные, такие как {method:'bitly'}?

1 Ответ

5 голосов
/ 11 октября 2011
chrome.contextMenus.create({'title': 'Shorten with bit.ly',
                            'contexts': ['all'],
                            'onclick': function(info, tab) {
                                shortenLink(info, tab, {method:'bitly'});
                            });

function shortenLink(info, tab, methodObj){
    ...
}
...