Триггер хром.browserAction.onClicked с функцией

Я хочу вызвать щелчок, к которому прислушивается следующий код:

chrome.browserAction.onClicked.addListener(function(tab) {});

причина в том, что у меня есть рабочее расширение, которое слушает в фоновом скрипте (addListener выше) и выполняет некоторые скрипты по щелчку:

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, {file: 'abc.js'});
chrome.tabs.executeScript(tab.id, {file: 'xxx.js'});
});

и теперь я хочу вызвать этот "onClicked" из контекстного меню:

var myContextPage = chrome.contextMenus.create({"title": myTitle, "contexts":["page"],
                                     "onclick": fctContext});

Итак, я подумал, что самый простой способ-это "щелкнуть" в fctContext. Возможно, есть лучший способ., но я не знаю, как решить мою проблему. Я также попытался запустить "executeScript", но это тоже не работает.

спасибо заранее!

//обновления

решение из ответов: Это решение работает:

//Shared code. When the argument length is two, it is coming from the context
// menu, while a single argument is coming from the browser action.
function fctContext() {
   var tab = arguments.length == 2 ? arguments[1] : arguments[0];
   // Do whatever you want with the tab.
}

// Browser Action
chrome.browserAction.onClicked.addListener(fctContext);

// Context Menu
chrome.contextMenus.create({
   title: myTitle,
   contexts: ['page'],
   onclick: fctContext
});

решение после тестирования некоторых других вещей:

function fctStart() {
  chrome.tabs.getSelected(null, function(tab){ 
    chrome.tabs.executeScript(tab.id, {file: 'abc.js'});
    chrome.tabs.executeScript(tab.id, {file: 'xxx.js'});
  }); 
}

в этом случае fctStart() работает с любой точки без необходимости передавать вкладку.

2 ответов


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


в вашем конкретном примере вам не нужно проходить tab.id как это было бы по умолчанию для текущей страницы в любом случае:

function fctContext() {
    chrome.tabs.executeScript(null, {file: 'abc.js'});
    chrome.tabs.executeScript(null, {file: 'xxx.js'});
}

Если вам нужна вкладка, то:

function fctContext(tab) {
    chrome.tabs.executeScript(tab.id, {file: 'abc.js'});
    chrome.tabs.executeScript(tab.id, {file: 'xxx.js'});
}

chrome.browserAction.onClicked.addListener(fctContext);

chrome.contextMenus.create({"title": myTitle, "contexts":["page"], "onclick": function(info, tab) {
    fctContext(tab);
}});