Opis
Użyj interfejsu chrome.action
API, aby sterować ikoną rozszerzenia na pasku narzędzi Google Chrome.
Dostępność
Plik manifestu
Aby użyć interfejsu chrome.action
API, określ "manifest_version"
jako 3
i uwzględnij klucz "action"
w pliku manifestu.
{ "name": "Action Extension", ... "action": { "default_icon": { // optional "16": "images/icon16.png", // optional "24": "images/icon24.png", // optional "32": "images/icon32.png" // optional }, "default_title": "Click Me", // optional, shown in tooltip "default_popup": "popup.html" // optional }, ... }
Klucz "action"
(wraz z jego elementami podrzędnymi) jest opcjonalny. Jeśli nie jest on uwzględniony, rozszerzenie nadal będzie wyświetlane na pasku narzędzi, aby zapewnić dostęp do menu rozszerzenia. Z tego powodu zalecamy, aby zawsze uwzględniać co najmniej klucze "action"
i "default_icon"
.
Pojęcia i zastosowanie
Elementy interfejsu
Ikona
Ikona jest głównym obrazem na pasku narzędzi rozszerzenia i jest ustawiana przez klucz "default_icon"
w kluczu "action"
pliku manifestu. Ikony muszą mieć szerokość i wysokość 16 pikseli niezależnych od urządzenia (DIP).
Klucz "default_icon"
to słownik rozmiarów i ścieżek do obrazów. Chrome używa tych ikon, aby wybrać skalę obrazu. Jeśli nie zostanie znalezione dopasowanie ścisłe, Chrome wybierze najbliższe dostępne dopasowanie i skaluje je tak, aby pasowało do obrazu, co może wpłynąć na jakość obrazu.
Urządzenia z mniej popularnymi współczynnikami skalowania, takimi jak 1,5x czy 1,2x, stają się coraz bardziej powszechne, dlatego zachęcamy do przesyłania ikon w różnych rozmiarach. Dzięki temu rozszerzenie będzie odporne na potencjalne zmiany rozmiaru wyświetlania ikon w przyszłości. Jeśli jednak podajesz tylko 1 rozmiar, klucz "default_icon"
może być też ustawiony na ciąg znaków ze ścieżką do pojedynczej ikony zamiast słownika.
Możesz też wywołać action.setIcon()
, aby programowo ustawić ikonę rozszerzenia, podając inną ścieżkę obrazu lub dostarczając dynamicznie generowaną ikonę za pomocą elementu canvas HTML lub, jeśli ustawiasz ikonę z poziomu skryptu service worker rozszerzenia, interfejsu offscreen canvas.
const canvas = new OffscreenCanvas(16, 16); const context = canvas.getContext('2d'); context.clearRect(0, 0, 16, 16); context.fillStyle = '#00FF00'; // Green context.fillRect(0, 0, 16, 16); const imageData = context.getImageData(0, 0, 16, 16); chrome.action.setIcon({imageData: imageData}, () => { /* ... */ });
W przypadku spakowanych rozszerzeń (instalowanych z pliku CRX) obrazy mogą być w większości formatów, które może wyświetlać silnik renderujący Blink, w tym PNG, JPEG, BMP, ICO i inne. Format SVG nie jest obsługiwany. Rozpakowane rozszerzenia muszą używać obrazów PNG.
Etykietka (tytuł)
Etykietka lub tytuł pojawia się, gdy użytkownik przytrzyma wskaźnik myszy nad ikoną rozszerzenia na pasku narzędzi. Jest on też uwzględniany w tekście na potrzeby ułatwień dostępu odczytywanym przez czytniki ekranu, gdy przycisk jest aktywny.
Domyślny opis jest ustawiany za pomocą pola "default_title"
klucza "action"
w manifest.json
. Możesz też ustawić go programowo, wywołując action.setTitle()
.
Plakietka
Działania mogą opcjonalnie wyświetlać „odznakę”, czyli fragment tekstu nałożony na ikonę. Umożliwia to aktualizowanie działania w celu wyświetlania niewielkiej ilości informacji o stanie rozszerzenia, np. licznika. Odznaka składa się z komponentu tekstowego i koloru tła. Ze względu na ograniczoną ilość miejsca zalecamy, aby tekst plakietki miał maksymalnie 4 znaki.
Aby utworzyć plakietkę, ustaw ją automatycznie, wywołując funkcje action.setBadgeBackgroundColor()
i action.setBadgeText()
. W pliku manifestu nie ma domyślnego ustawienia plakietki. Wartości koloru plakietki mogą być tablicą 4 liczb całkowitych z zakresu od 0 do 255, które tworzą kolor RGBA plakietki, lub ciągiem znaków z wartością koloru CSS.
chrome.action.setBadgeBackgroundColor( {color: [0, 255, 0, 0]}, // Green () => { /* ... */ }, ); chrome.action.setBadgeBackgroundColor( {color: '#00FF00'}, // Also green () => { /* ... */ }, ); chrome.action.setBadgeBackgroundColor( {color: 'green'}, // Also, also green () => { /* ... */ }, );
Wyskakujące okienko
Wyskakujące okienko działania jest wyświetlane, gdy użytkownik kliknie przycisk działania rozszerzenia na pasku narzędzi. Wyskakujące okienko może zawierać dowolną treść HTML i będzie automatycznie dopasowywane do jej rozmiaru. Rozmiar wyskakującego okienka musi mieścić się w zakresie od 25 x 25 do 800 x 600 pikseli.
Początkowe ustawienie wyskakującego okienka jest określone przez właściwość "default_popup"
w kluczu "action"
w pliku manifest.json
. Jeśli ta właściwość jest obecna, powinna wskazywać ścieżkę względną w katalogu rozszerzenia. Można ją też aktualizować dynamicznie, aby wskazywała inną ścieżkę względną, za pomocą metody action.setPopup()
.
Przypadki użycia
Stan karty
Działania rozszerzenia mogą mieć różne stany na każdej karcie. Aby ustawić wartość dla poszczególnych kart, użyj właściwości tabId
w metodach ustawień interfejsu action
API. Aby na przykład ustawić tekst plakietki na konkretnej karcie, wykonaj te czynności:
function getTabId() { /* ... */} function getTabBadge() { /* ... */} chrome.action.setBadgeText( { text: getTabBadge(tabId), tabId: getTabId(), }, () => { ... } );
Jeśli pominiesz właściwość tabId
, ustawienie zostanie potraktowane jako globalne. Ustawienia dotyczące konkretnej karty mają wyższy priorytet niż ustawienia globalne.
Stan włączony
Domyślnie działania na pasku narzędzi są włączone (można je kliknąć) na każdej karcie. Możesz zmienić to ustawienie domyślne, ustawiając właściwość default_state
w kluczu action
pliku manifestu. Jeśli parametr default_state
ma wartość "disabled"
, działanie jest domyślnie wyłączone i musi zostać włączone programowo, aby można było je kliknąć. Jeśli parametr default_state
ma wartość "enabled"
(domyślną), działanie jest domyślnie włączone i można je kliknąć.
Stan możesz kontrolować programowo za pomocą metod action.enable()
i action.disable()
. Wpływa to tylko na to, czy wyskakujące okienko (jeśli występuje) lub zdarzenie action.onClicked
jest wysyłane do rozszerzenia. Nie ma to wpływu na obecność działania na pasku narzędzi.
Przykłady
Poniższe przykłady pokazują typowe sposoby wykorzystania działań w rozszerzeniach. Aby wypróbować ten interfejs API, zainstaluj przykład interfejsu Action API z repozytorium chrome-extension-samples.
Wyświetlanie wyskakującego okienka
Rozszerzenie często wyświetla wyskakujące okienko, gdy użytkownik kliknie jego działanie. Aby zaimplementować to w swoim rozszerzeniu, zadeklaruj wyskakujące okienko w pliku manifest.json
i określ treść, która ma być w nim wyświetlana.
// manifest.json { "name": "Action popup demo", "version": "1.0", "manifest_version": 3, "action": { "default_title": "Click to view a popup", "default_popup": "popup.html" } }
<!-- popup.html --> <!DOCTYPE html> <html> <head> <style> html { min-height: 5em; min-width: 10em; background: salmon; } </style> </head> <body> <p>Hello, world!</p> </body> </html>
Wstrzykiwanie skryptu treści po kliknięciu
Typowym wzorcem w przypadku rozszerzeń jest udostępnianie ich głównej funkcji za pomocą działania rozszerzenia. Ten wzorzec ilustruje poniższy przykład. Gdy użytkownik kliknie działanie, rozszerzenie wstrzyknie skrypt treści na bieżącą stronę. Następnie skrypt treści wyświetla alert, aby sprawdzić, czy wszystko działa zgodnie z oczekiwaniami.
// manifest.json { "name": "Action script injection demo", "version": "1.0", "manifest_version": 3, "action": { "default_title": "Click to show an alert" }, "permissions": ["activeTab", "scripting"], "background": { "service_worker": "background.js" } }
// background.js chrome.action.onClicked.addListener((tab) => { chrome.scripting.executeScript({ target: {tabId: tab.id}, files: ['content.js'] }); });
// content.js alert('Hello, world!');
Emulowanie działań za pomocą declarativeContent
Ten przykład pokazuje, jak logika w tle rozszerzenia może (a) domyślnie wyłączać działanie i (b) używać declarativeContent, aby włączać działanie w określonych witrynach.
// service-worker.js // Wrap in an onInstalled callback to avoid unnecessary work // every time the service worker is run chrome.runtime.onInstalled.addListener(() => { // Page actions are disabled by default and enabled on select tabs chrome.action.disable(); // Clear all rules to ensure only our expected rules are set chrome.declarativeContent.onPageChanged.removeRules(undefined, () => { // Declare a rule to enable the action on example.com pages let exampleRule = { conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: {hostSuffix: '.example.com'}, }) ], actions: [new chrome.declarativeContent.ShowAction()], }; // Finally, apply our new array of rules let rules = [exampleRule]; chrome.declarativeContent.onPageChanged.addRules(rules); }); });
Typy
OpenPopupOptions
Właściwości
- windowId
number opcjonalny
Identyfikator okna, w którym ma się otworzyć wyskakujące okienko działania. Jeśli nie zostanie określone, domyślnie przyjmuje wartość obecnie aktywnego okna.
TabDetails
Właściwości
- tabId
number opcjonalny
Identyfikator karty, której stan chcesz sprawdzić. Jeśli nie określono karty, zwracany jest stan niezwiązany z kartą.
UserSettings
Zbiór ustawień określonych przez użytkownika, które są związane z działaniem rozszerzenia.
Właściwości
- isOnToolbar
Wartość logiczna
Czy ikona działania rozszerzenia jest widoczna na pasku narzędzi najwyższego poziomu w oknach przeglądarki (czyli czy rozszerzenie zostało „przypięte” przez użytkownika).
UserSettingsChange
Właściwości
- isOnToolbar
wartość logiczna opcjonalna
Czy ikona działania rozszerzenia jest widoczna na pasku narzędzi najwyższego poziomu w oknach przeglądarki (czyli czy rozszerzenie zostało „przypięte” przez użytkownika).
Metody
disable()
chrome.action.disable(
tabId?: number,
): Promise<void>
Wyłącza działanie na karcie.
Parametry
- tabId
number opcjonalny
Identyfikator karty, dla której chcesz zmodyfikować działanie.
Zwroty
-
Promise<void>
enable()
chrome.action.enable(
tabId?: number,
): Promise<void>
Włącza działanie na karcie. Domyślnie działania są włączone.
Parametry
- tabId
number opcjonalny
Identyfikator karty, dla której chcesz zmodyfikować działanie.
Zwroty
-
Promise<void>
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Pobiera kolor tła działania.
Parametry
- szczegóły
Zwroty
-
Promise<extensionTypes.ColorArray>
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
): Promise<string>
Pobiera tekst plakietki działania. Jeśli nie podasz karty, zwracany jest tekst plakietki niezwiązany z kartą. Jeśli parametr displayActionCountAsBadgeText jest włączony, zwracany jest tekst zastępczy, chyba że występuje uprawnienie declarativeNetRequestFeedback lub podano tekst plakietki dla karty.
Parametry
- szczegóły
Zwroty
-
Promise<string>
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Pobiera kolor tekstu działania.
Parametry
- szczegóły
Zwroty
-
Promise<extensionTypes.ColorArray>
getPopup()
chrome.action.getPopup(
details: TabDetails,
): Promise<string>
Pobiera dokument HTML ustawiony jako wyskakujące okienko dla tego działania.
Parametry
- szczegóły
Zwroty
-
Promise<string>
Parametry
- szczegóły
Zwroty
-
Promise<string>
getUserSettings()
chrome.action.getUserSettings(): Promise<UserSettings>
Zwraca ustawienia określone przez użytkownika dotyczące działania rozszerzenia.
Zwroty
-
Promise<UserSettings>
isEnabled()
chrome.action.isEnabled(
tabId?: number,
): Promise<boolean>
Wskazuje, czy działanie rozszerzenia jest włączone na karcie (lub globalnie, jeśli nie podano wartości tabId
). Działania włączone tylko za pomocą declarativeContent
zawsze zwracają wartość false.
Parametry
- tabId
number opcjonalny
Identyfikator karty, dla której chcesz sprawdzić stan włączenia.
Zwroty
-
Promise<boolean>
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Otwiera wyskakujące okienko rozszerzenia. W przypadku Chrome w wersjach od 118 do 126 jest to dostępne tylko w przypadku rozszerzeń zainstalowanych na podstawie zasad.
Parametry
- Opcje
OpenPopupOptions opcjonalny
Określa opcje otwierania wyskakującego okienka.
Zwroty
-
Promise<void>
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
): Promise<void>
Ustawia kolor tła plakietki.
Parametry
- szczegóły
obiekt
- kolor
string | ColorArray
Tablica 4 liczb całkowitych z zakresu [0, 255], które składają się na kolor RGBA plakietki. Na przykład nieprzezroczysty czerwony to
[255, 0, 0, 255]
. Może to być też ciąg znaków z wartością CSS, przy czym nieprzezroczysta czerwień to#FF0000
lub#F00
. - tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
-
Zwroty
-
Promise<void>
setBadgeText()
chrome.action.setBadgeText(
details: object,
): Promise<void>
Ustawia tekst plakietki dla działania. Odznaka jest wyświetlana nad ikoną.
Parametry
- szczegóły
obiekt
- tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
- tekst
string opcjonalny
Możesz przekazać dowolną liczbę znaków, ale w tym miejscu zmieszczą się tylko około 4. Jeśli przekażesz pusty ciąg znaków (
''
), tekst plakietki zostanie wyczyszczony. Jeśli podasz wartośćtabId
, a wartośćtext
będzie mieć wartość null, tekst na określonej karcie zostanie wyczyszczony i przywrócony do domyślnego tekstu plakietki globalnej.
-
Zwroty
-
Promise<void>
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
): Promise<void>
Ustawia kolor tekstu plakietki.
Parametry
- szczegóły
obiekt
- kolor
string | ColorArray
Tablica 4 liczb całkowitych z zakresu [0, 255], które składają się na kolor RGBA plakietki. Na przykład nieprzezroczysty czerwony to
[255, 0, 0, 255]
. Może to być też ciąg znaków z wartością CSS, przy czym nieprzezroczysta czerwień to#FF0000
lub#F00
. Jeśli nie ustawisz tej wartości, kolor zostanie wybrany automatycznie, tak aby kontrastował z kolorem tła plakietki i tekst był widoczny. Kolory z wartościami alfa równymi 0 nie zostaną ustawione i zwrócą błąd. - tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
-
Zwroty
-
Promise<void>
setIcon()
chrome.action.setIcon(
details: object,
): Promise<void>
Ustawia ikonę działania. Ikonę można określić jako ścieżkę do pliku obrazu, dane pikseli z elementu canvas lub słownik zawierający jedną z tych wartości. Należy określić właściwość path lub imageData.
Parametry
- szczegóły
obiekt
- imageData
ImageData | object opcjonalny
Obiekt ImageData lub słownik {size -> ImageData} reprezentujący ikonę do ustawienia. Jeśli ikona jest określona jako słownik, rzeczywisty obraz, który ma być użyty, jest wybierany w zależności od gęstości pikseli ekranu. Jeśli liczba pikseli obrazu mieszczących się w jednej jednostce przestrzeni ekranu wynosi
scale
, zostanie wybrany obraz o rozmiarzescale
* n, gdzie n to rozmiar ikony w interfejsie. Musisz określić co najmniej 1 obraz. Pamiętaj, że „details.imageData = foo” jest równoznaczne z „details.imageData = {'16': foo}”. - ścieżka
string | object opcjonalnie
Ścieżka względna do obrazu lub słownik {rozmiar -> ścieżka względna do obrazu} wskazujący ikonę do ustawienia. Jeśli ikona jest określona jako słownik, rzeczywisty obraz, który ma być użyty, jest wybierany w zależności od gęstości pikseli ekranu. Jeśli liczba pikseli obrazu mieszczących się w jednej jednostce przestrzeni ekranu wynosi
scale
, zostanie wybrany obraz o rozmiarzescale
* n, gdzie n to rozmiar ikony w interfejsie. Musisz określić co najmniej 1 obraz. Pamiętaj, że „details.path = foo” jest równoważne „details.path = {'16': foo}”. - tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
-
Zwroty
-
Promise<void>
Chrome w wersji 96 lub nowszej
setPopup()
chrome.action.setPopup(
details: object,
): Promise<void>
Ustawia dokument HTML, który ma być otwierany jako wyskakujące okienko, gdy użytkownik kliknie ikonę działania.
Parametry
- szczegóły
obiekt
- wyskakujące okienko
ciąg znaków
Ścieżka względna do pliku HTML, który ma się wyświetlać w wyskakującym okienku. Jeśli ustawisz pusty ciąg znaków (
''
), nie będzie się wyświetlać żadne wyskakujące okienko. - tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
-
Zwroty
-
Promise<void>
setTitle()
chrome.action.setTitle(
details: object,
): Promise<void>
Ustawia nazwę działania. Wyświetla się w etykietce.
Parametry
- szczegóły
obiekt
- tabId
number opcjonalny
Ogranicza zmianę do sytuacji, w której wybrana jest konkretna karta. Resetuje się automatycznie po zamknięciu karty.
- tytuł
ciąg znaków
Ciąg znaków, który ma być wyświetlany po najechaniu kursorem na działanie.
-
Zwroty
-
Promise<void>
Wydarzenia
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
Uruchamiane po kliknięciu ikony działania. To zdarzenie nie zostanie wywołane, jeśli działanie ma wyskakujące okienko.
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
Uruchamiane, gdy zmienią się ustawienia określone przez użytkownika, które są związane z działaniem rozszerzenia.
Parametry
- callback
funkcja
Parametr
callback
wygląda tak:(change: UserSettingsChange) => void
- zmień
-