Trigger-chrome.browserAction.onClicked mit einer Funktion

Ich auslösen wollen, die klicken Sie auf, um die folgenden code-hören:

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

Der Grund ist, dass ich eine funktionierende extension, die das hören in einem background-script (die addListener oben) und führt einige Skripte auf klicken Sie auf:

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

Und jetzt will ich auslösen dieser "onClicked" vom Kontext-Menü:

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

So, ich dachte, der einfachste Weg wäre es, die "klicken" in fctContext.
Vielleicht gibt es einen besseren Weg, aber ich weiß nicht, wie mein problem zu lösen. Ich habe auch versucht zu laufen "executeScript" aber das funktioniert nicht weder.

Vielen Dank im Voraus!

//Update

Lösung von Antworten:
Diese Lösung funktioniert:

//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
});

Lösung nach der Prüfung einige andere Dinge:

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

In diesem Fall fctStart() ist die Arbeit von einem beliebigen Punkt aus, ohne zu passieren, die tab.

  • Ich würde empfehlen, die Trennung der Wirkung von den Auslöser. E. g. erstellen Sie eine function do_something(){} - und-stick, der in die Verlängerung, so dass das Verhalten ist eine komplett andere Funktion, die sich einfach informieren & ausgelöst durch das klicken. Anschließend können Sie erneut verwenden, dass do_something(); Funktion, wo immer Sie es brauchen statt binden es zu einem chrome-event.
  • Danke für deinen Kommentar/Idee. Dies ist etwas, was ich schon ausprobiert habe. Das problem ist, dass ich nicht genau weiß, wie man den richtigen "Reiter", die der parameter ist, der von meiner aktuellen Funktion innerhalb der addListener, außerhalb der chrome.browserAction.onClicked.addListener
  • Ich habe Ihre Konten zusammengeführt. Jetzt können Sie kommentieren, Antworten, Bearbeiten Sie Ihre Frage oder die Antwort akzeptieren, die Ihnen geholfen 🙂 vielen Dank für die Registrierung. Leider konnte ich mich nicht verbinden, die Antwort, die Sie Links unter Berufung auf so viele Leute, tut mir Leid, dass.
  • Danke für das Zusammenführen der accounts!
InformationsquelleAutor Daniel | 2011-06-27
Schreibe einen Kommentar