Trigger chrome.browserAction.onClicked mit einer Funktion

8

Ich möchte den Klick auslösen, auf den der folgende Code hört:

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

Der Grund ist, dass ich eine funktionierende Erweiterung habe, die in einem Hintergrund-Skript (dem addListener oben) zuhört und einige Skripte beim Klicken ausführt:

%Vor%

Und jetzt möchte ich dieses "onClicked" aus einem Kontextmenü auslösen:

%Vor%

Also dachte ich mir, dass der einfachste Weg wäre, in fctContext "klicken" zu müssen. Vielleicht gibt es einen besseren Weg, aber ich kann mein Problem nicht lösen. Ich habe auch versucht, "executeScript" auszuführen, aber das funktioniert auch nicht.

Vielen Dank im Voraus!

// Aktualisieren

Lösung aus Antworten: Diese Lösung funktioniert:

%Vor%

Lösung nach dem Testen einiger anderer Dinge:

%Vor%

In diesem Fall arbeitet fctStart() von einem beliebigen Punkt aus, ohne die Registerkarte zu übergeben.

    
Daniel 27.06.2011, 22:04
quelle

2 Antworten

2

Denken Sie daran, dass Argumente in JavaScript optional sind. Jede Funktion hat ein zugeordnetes arguments -Objekt. Dieses Argument dient als Array. In Ihrem Fall erfordert das eine, während das andere nicht. N Argumente sind in einer Funktion (Browser Action) gleich, als M Argumente in der anderen (Kontextmenü), der einzige Unterschied zwischen diesen beiden Argumenten ist die arguments.callee , die eine Möglichkeit bietet, den eigentlichen Code innerhalb der Funktion selbst zu referenzieren . Sie müssen sich darüber keine Gedanken machen, wenn Sie etwas Grundlegendes wollen.

Ihr fctContext könnte der Code für die Freigabe zwischen Ihrem BrowserAction-Klick und Ihrem Kontextmenü sein. Ich habe etwas ähnliches in der Reload All Tabs-Erweiterung gemacht.

Suche nach this.reload in Ссылка , du Beachten Sie, dass this.reload für das Kontextmenü und die Browseraktion verwendet wird. Sie teilen nur den Code.

AKTUALISIERT mit dem Beispiel der Argumente in:

In Ihrem Fall tun Sie genau das gleiche.

%Vor%

Das Problem mit dem obigen Ansatz ist die Wartbarkeit. Wenn sich die API ändert, könnte sie brechen. Persönlich würde ich die Argumente lieber explizit benennen. Der Benutzer muss also nicht im Argumenten-Array nachschlagen.

%Vor%

Hoffe das hilft!

    
Mohamed Mansour 27.06.2011, 22:36
quelle
2

In Ihrem speziellen Beispiel müssen Sie tab.id nicht weitergeben, da es ohnehin auf die aktuelle Seite voreingestellt wäre:

%Vor%

Wenn Sie die Registerkarte benötigen, dann:

%Vor%     
serg 27.06.2011 23:02
quelle