Wie füge ich in der Adressleiste für eine Chrome-Erweiterung ein Symbol hinzu?

8

Ich bin mir nicht sicher, wie ich das machen soll, und die Dokumentation scheint das nicht so offensichtlich zu machen.

Ich habe versucht, ein background_page zu machen und chrome.pageAction.show(tab.id); darin zu setzen, aber das scheint nicht zu funktionieren.

Ich möchte das browser_action -Symbol nicht verwenden, da das Symbol lediglich den Status des Plugins widerspiegelt, aber es ist keine Schaltfläche zum Ausführen von Aktionen.

Wie füge ich das Symbol von page_action in die Adressleiste für eine beliebige Seite / Registerkarte ein?

EDIT: Hier ist mein manifest.json:

%Vor%

Where icon.png ist eine PNG-Grafik im Format 19 x 19 Pixel. Hier ist die background.html -Quelle, in der ich versuche, das page_action-Icon für alle Tabs erscheinen zu lassen:

%Vor%     
trusktr 04.12.2011, 00:28
quelle

3 Antworten

15

Ich sehe zwei Probleme mit Ihrem Code.

  1. Sie können keine Inline-Skriptblöcke in Ihrer Hintergrundseite verwenden - js-Code kann nur von einem verknüpften Skript aus ausgeführt werden (so: <script type="text/javascript" src="background.js"></script> ). Dies liegt an der Inhaltssicherheitsrichtlinie .

  2. Wie in Abrahams Antwort erwähnt, sollten Sie browser_action und nicht page_action verwenden, da das Symbol für alle Seiten angezeigt werden soll. Laut Google pageAction-Dokumentation :

      

    Verwenden Sie keine Seitenaktionen für Funktionen, die für die meisten Seiten sinnvoll sind.   Verwenden Sie stattdessen Browser-Aktionen.

    Symbole für Seitenaktionen werden auf der Omnibar (der Adressleiste von Chrome) angezeigt, während Symbole für Browseraktionen als Symbolleistenschaltfläche neben der Omnibar angezeigt werden. Beide können verwendet werden, um den Status des Plugins und als Aktionsschaltfläche zu reflektieren.

Lösungen

Damit das Symbol angezeigt wird, müssen Sie Folgendes aufrufen: chrome.pageAction.show(tabId) . Sie können dies jedoch nicht einfach über ein Inhaltsskript aufrufen, da chrome.pageAction.show () die tabId übergeben und tabId von chrome.tabs und chrome.tabs ist nicht über Inhaltsskripts zugänglich .

Um eine Browser-Aktionsschaltfläche hinzuzufügen und ihr Verhalten beim Klicken zu definieren, definieren Sie das browser_action-Element in Ihrer manifest.json-Datei ...

%Vor%

... und setze diesen Code in dein Hintergrundskript:

%Vor%

Oder Wenn Sie gegen die Konvention gehen und eine pageAction verwenden möchten, können Sie den Code manifest.json aus Ihrer Frage verwenden und Folgendes in Ihr Hintergrundskript einfügen:

%Vor%

Weitere Informationen finden Sie im Quellcode einiger ihrer Beispielerweiterungen .

    
Stephen M. Harris 24.09.2012, 23:41
quelle
3

Wenn Sie möchten, dass ein Inhaltsskript ein Seitenaktionssymbol anzeigt, kann er (das Inhaltsskript) das nicht, aber er kann eine Nachricht an die background.js senden (background.js is) erlaubt, Seitenaktionssymbole zu zeigen)

Inhaltsskript (zB foo.js):

%Vor%

background.js:

%Vor%     
sports 14.09.2015 18:23
quelle
0

Verwenden Sie ein browser_action -Symbol. page_action und browser_action sind identisch und bieten dieselbe Funktionalität, außer dass page_action s nur für bestimmte Seiten aktiviert werden kann. Wenn Sie nicht möchten, dass browser_action sich wie eine Schaltfläche verhält, tun Sie nichts.

    
abraham 04.12.2011 08:05
quelle