Wie füge ich ein icon in der Adressleiste für eine Chrome-Erweiterung?
Ich bin mir nicht sicher, wie es zu tun, und die Dokumentation scheint nicht zu machen, das ganz offensichtlich.
Ich versucht, einen background_page
- und putting - chrome.pageAction.show(tab.id);
drin, aber das scheint nicht zu funktionieren.
Möchte ich nicht verwenden, die browser_action
Symbol, weil das Symbol spiegelt lediglich den status des plugins, aber es ist nicht eine Taste für irgendwelche Aktionen.
Wie füge ich die page_action das Symbol in der Adressleiste für jede Seite/tab zu allen Zeiten?
EDIT: das Hier ist mein manifest.json:
{
"name": "My Very First Extension :D",
"version": "0.0.1",
"description": "Awesomeness",
"background_page": "background.html",
"page_action": {
"default_icon": "icon.png"
},
"content_scripts": [{
"matches": ["http://*/*", "https://*/*"],
"js": ["mmm.js"]
}]
}
Wo-Symbol.png ist ein 19x19 pixel, PNG-Grafik. Hier ist die background.html Quelle, wo ich versuche zu machen, die page_action-Symbol angezeigt wird für alle Registerkarten:
<!DOCTYPE html>
<html>
<head>
<script>
chrome.pageAction.show(tab.id);
</script>
</head>
</html>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich sehe zwei Probleme mit dem code.
Können Sie die Verwendung von inline-Skriptblöcke in der hintergrund-Seite -- js-code kann nur ausgeführt werden, aus der Sie ein verknüpftes Skript (etwa so:
<script type="text/javascript" src="background.js"></script>
). Dies ist aufgrund der Content Security Policy.Wie bereits in Abrahams Antwort, da möchte man das Symbol für alle Seiten, die Sie verwenden sollten browser_action, nicht page_action. Nach Google pageAction Dokumentation Seite:
Icons für die Seite Aktionen erscheinen in der omnibar (Chrome in der Adressleiste), während Symbole für die browser-Aktionen erscheinen in der Symbolleiste auf die Schaltfläche neben der omnibar. Entweder kann verwendet werden, um zu reflektieren, den status des plugins und wie eine Aktion-Schaltfläche.
Lösungen
Um das Symbol angezeigt wird, müssen Sie rufen:
chrome.pageAction.show(tabId)
. Allerdings können Sie nicht einfach rufen Sie diese aus einem content-script, da chrome.pageAction.show() übergeben werden müssen die tabId, und tabId abgerufen von chrome.tabs und chrome.tabs ist nicht zugänglich von der content-Skripte.Hinzufügen einer browser-action-Schaltfläche und definieren Sie das Verhalten, wenn auf Sie geklickt haben, definieren Sie die browser_action element in Ihrem manifest.json-Datei ...
... und legen Sie diesen code in Ihre hintergrund-Skript:
Oder, wenn Sie gehen wollen, gegen Konvention und verwenden Sie eine pageAction, können Sie das manifest.json-code aus Ihrer Frage und platzieren Sie die folgenden in Ihrem hintergrund-Skript:
Für die weitere Forschung, check-out der source-code von einigen Ihrer sample-Erweiterungen.
Wenn Sie wollen ein content-script, um zu zeigen eine Seite funktionssymbol, er (der content-script) kann das nicht tun, aber er kann senden Sie eine Nachricht an die background.js es zu tun (background.js erlaubt ist zeige Seite action-icons)
Inhalt Skript (zB. foo.js):
background.js:
Verwenden
browser_action
- Symbol.page_action
undbrowser_action
sind gleich und bieten die gleichen Funktionen, außer, dasspage_action
s aktiviert werden können, nur für bestimmte Seiten. Wenn Sie nicht möchten, dass diebrowser_action
zu handeln, wie eine Schaltfläche als nicht haben Sie nichts tun.chrome.pageAction.show(tab.id)
ist Sie Weg, es zu tun. Sie zeigen uns mehr von deinem code zu Debuggen, dass eine weitere obwohl.tab.id
ist nicht festgelegt, sodass Sie nicht wissen, was Reiter zu zeigen, diepage_action
page_action
- Symbol erscheint für alle Seiten? (Wünschte, es war einfach wiebrowser_action
s!)page_action
ist nicht darauf ausgelegt, auf allen Seiten. Das ist das, wasbrowser_actions
s sind für. Wenn Sie wirklich wollen, haben Sie, um eine Liste mit allen tabs und rufenchrome.pageAction.show(id)
für jeden einzelnen tab.page_actions
undbrowser_actions
sind beide "Knöpfe". Der einzige Unterschied ist die eine ist bestimmten Seite und die andere ist browser global.browser_actions
können ausgeblendet werden, indem Sie Benutzer, wenn Sie so wählen, dass möglicherweise die beste Wahl.page_action
erscheinen bei aller Zeiten, weil es nicht look wie eine Schaltfläche. In älteren Versionen von chrome, die Fähigkeit zu haben, Seite Aktionen auf allen Seiten war ein standard-feature.