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, dassdo_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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denken Sie daran, die Argumente sind optional in JavaScript. Jede Funktion hat eine zugeordnete
arguments
Objekt. Dass Argumente, die fungiert als ein array. In Ihrem Fall, einer von Ihnen erfordert, dass, während der andere nicht. Mit N Argumenten ist das gleiche in einer Funktion (Browser Handeln), als M die Argumente der anderen (Kontext-Menü), der einzige Unterschied zwischen diesen beiden Argumenten ist diearguments.callee
stellt eine Möglichkeit zum verweisen auf die eigentliche code innerhalb der Funktion selbst. Sie müssen nicht befürchten, dass, wenn Sie wollen, etwas grundlegendes.Ihre
fctContext
könnte die Aktie-in der Lage code zwischen Ihrem browserAction klicken und Ihr Kontext-Menü. Ich habe etwas ähnliches in dem neu Laden Alle Tabs Erweiterung.Suche nach
this.reload
im https://github.com/mohamedmansour/reload-all-tabs-extension/blob/master/js/reload_controller.js, Sie werden feststellen, dassthis.reload
verwendet wird, um ein Kontextmenü und die Browser-Aktion. Sie teilen einfach den code.AKTUALISIERT mit den Argumenten Beispiel gebacken, in:
In Ihrem Fall, Sie tun genau das gleiche.
Das problem mit dem obigen Ansatz ist die Wartbarkeit, wenn die API-änderungen, die es brechen kann. Ich persönlich würde eher explizit nennen die Argumente. Damit der Benutzer nicht zu tun haben, eine Suche in der arguments-array.
Hoffe, das hilft!
In Ihrer speziellen Beispiel müssen Sie nicht brauchen, um passieren
tab.id
als wäre es standardmäßig auf die aktuelle Seite sowieso:Wenn Sie tun, müssen die Reiter dann:
chrome.tabs.executeScript
So funktioniert es auch 🙂