Opis
Użyj interfejsu API chrome.action, aby kontrolować ikonę rozszerzenia na pasku narzędzi Google Chrome.
Dostępność
Plik manifestu
Aby używać interfejsu API browser.action, 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 kluczami podrzędnymi) jest opcjonalny. Jeśli nie zostanie uwzględniony, rozszerzenie będzie nadal 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 użycie
Elementy interfejsu
Ikona
Ikona to główny obraz na pasku narzędzi rozszerzenia, który jest ustawiany przez klucz "default_icon" w kluczu "action" pliku manifestu. Ikony muszą mieć 16 pikseli niezależnych od urządzenia (DIP) szerokości i wysokości.
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 znajdzie dokładnego dopasowania, wybierze najbliższy dostępny rozmiar i przeskaluje go, aby dopasować do obrazu, co może wpłynąć na jakość obrazu.
Urządzenia o mniej typowych współczynnikach skalowania, takich jak 1,5x czy 1,2x, stają się coraz bardziej popularne, dlatego zachęcamy do udostępniania ikon w różnych rozmiarach. Dzięki temu ikona rozszerzenia będzie też dobrze wyglądać w przyszłości, nawet jeśli zmieni się rozmiar wyświetlania ikon. Jeśli jednak podajesz tylko 1 rozmiar, klucz "default_icon" można też ustawić na ciąg znaków ze ścieżką do pojedynczej ikony zamiast słownika.
Możesz też wywołać funkcję action.setIcon(), aby ustawić ikonę rozszerzenia automatycznie, podając inną ścieżkę do obrazu lub ikonę wygenerowaną dynamicznie za pomocą elementu canvas HTML, a jeśli ustawiasz ją z poziomu skryptu service worker rozszerzenia – interfejsu API 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);
browser.action.setIcon({imageData: imageData}, () => { /* ... */ });
W przypadku spakowanych rozszerzeń (zainstalowanych z pliku .crx) obrazy mogą być w większości formatów, które może wyświetlać silnik renderowania Blink, w tym PNG, JPEG, BMP, ICO i innych. Format SVG nie jest obsługiwany. Rozpakowane rozszerzenia muszą używać obrazów PNG.
Etykietka (tytuł)
Etykietka lub tytuł pojawia się, gdy użytkownik najeżdża wskaźnikiem myszy na ikonę rozszerzenia na pasku narzędzi. Jest on też uwzględniany w tekście odczytywanym przez czytniki ekranu, gdy przycisk jest zaznaczony.
Domyślna etykietka jest ustawiana za pomocą pola "default_title" klucza "action" w pliku manifest.json.
Możesz też ustawić go automatycznie, wywołując action.setTitle().
Plakietka
Działania mogą opcjonalnie wyświetlać „plakietkę” – tekst nałożony na ikonę. Dzięki temu możesz zaktualizować działanie, aby wyświetlać niewielką ilość informacji o stanie rozszerzenia, np. licznik. Plakietka zawiera komponent tekstowy i kolor 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 kolorów 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.
browser.action.setBadgeBackgroundColor(
{color: [0, 255, 0, 0]}, // Green
() => { /* ... */ },
);
browser.action.setBadgeBackgroundColor(
{color: '#00FF00'}, // Also green
() => { /* ... */ },
);
browser.action.setBadgeBackgroundColor(
{color: 'green'}, // Also, also green
() => { /* ... */ },
);
Wyskakujące okienko
Wyskakujące okienko działania jest wyświetlane, gdy użytkownik kliknie przycisk polecenia 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.
Wyskakujące okienko jest początkowo ustawiane 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 go też dynamicznie aktualizować, aby wskazywał inną ścieżkę względną, za pomocą metody action.setPopup().
Przypadki użycia
Stan poszczególnych kart
Działania rozszerzenia mogą mieć różne stany na każdej karcie. Aby ustawić wartość dla pojedynczej karty, użyj właściwości tabId w metodach ustawień interfejsu API action. Aby na przykład ustawić tekst plakietki na konkretnej karcie, wykonaj te czynności:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
browser.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
Jeśli właściwość tabId zostanie pominięta, ustawienie będzie traktowane jako globalne. Ustawienia dotyczące kart mają pierwszeństwo przed ustawieniami globalnymi.
Stan włączenia
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ąć.
Stanem możesz sterować programowo za pomocą metod action.enable() i action.disable(). Wpływa to tylko na to, czy wyskakujące okienko (jeśli istnieje) 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ą kilka typowych sposobów używania działań w rozszerzeniach. Aby wypróbować ten interfejs API, zainstaluj przykład interfejsu Action API z repozytorium chrome-extension-samples.
wyświetlić wyskakujące okienko,
Często zdarza się, że rozszerzenie wyświetla wyskakujące okienko, gdy użytkownik kliknie działanie rozszerzenia. Aby zaimplementować to we własnym rozszerzeniu, zadeklaruj wyskakujące okienko w pliku manifest.json i określ treść, którą Chrome ma w nim wyświetlać.
// 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 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 wstrzykuje skrypt treści na bieżącej stronie. 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
browser.action.onClicked.addListener((tab) => {
browser.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 działania rozszerzenia w tle może (a) domyślnie wyłączyć działanie i (b) użyć declarativeContent, aby włączyć 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
browser.runtime.onInstalled.addListener(() => {
// Page actions are disabled by default and enabled on select tabs
browser.action.disable();
// Clear all rules to ensure only our expected rules are set
browser.declarativeContent.onPageChanged.removeRules(undefined, () => {
// Declare a rule to enable the action on example.com pages
let exampleRule = {
conditions: [
new browser.declarativeContent.PageStateMatcher({
pageUrl: {hostSuffix: '.example.com'},
})
],
actions: [new browser.declarativeContent.ShowAction()],
};
// Finally, apply our new array of rules
let rules = [exampleRule];
browser.declarativeContent.onPageChanged.addRules(rules);
});
});
Typy
OpenPopupOptions
Właściwości
-
windowId
number optional
Identyfikator okna, w którym ma się otworzyć wyskakujące okienko działania. Jeśli nie zostanie określone, domyślnie przyjmuje obecnie aktywne okno.
TabDetails
Właściwości
-
tabId
number optional
Identyfikator karty, której stan chcesz sprawdzić. Jeśli nie określono karty, zwracany jest stan niezwiązany z kartą.
UserSettings
Zbiór określonych przez użytkownika ustawień związanych z działaniem rozszerzenia.
Właściwości
-
isOnToolbar
wartość logiczna
Określa, 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
boolean opcjonalne
Określa, 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()
browser.action.disable(
tabId?: number,
): Promise<void>
Wyłącza działanie na karcie.
Parametry
-
tabId
number optional
Identyfikator karty, dla której chcesz zmodyfikować działanie.
Zwroty
-
thought Promise<void>
enable()
browser.action.enable(
tabId?: number,
): Promise<void>
Włącza działanie na karcie. Domyślnie działania są włączone.
Parametry
-
tabId
number optional
Identyfikator karty, dla której chcesz zmodyfikować działanie.
Zwroty
-
thought Promise<void>
getBadgeBackgroundColor()
browser.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Pobiera kolor tła działania.
Parametry
-
szczegóły
Zwroty
-
Promise<extensionTypes.ColorArray>
getBadgeText()
browser.action.getBadgeText(
details: TabDetails,
): Promise<string>
Pobiera tekst plakietki działania. Jeśli nie podano karty, zwracany jest tekst plakietki, który nie jest powiązany z kartą. Jeśli włączona jest opcja displayActionCountAsBadgeText, zwracany jest tekst zastępczy, chyba że obecne jest uprawnienie declarativeNetRequestFeedback lub podano tekst plakietki dla konkretnej karty.
Parametry
-
szczegóły
Zwroty
-
Promise<string>
getBadgeTextColor()
browser.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Pobiera kolor tekstu działania.
Parametry
-
szczegóły
Zwroty
-
Promise<extensionTypes.ColorArray>
getPopup()
browser.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()
browser.action.getUserSettings(): Promise<UserSettings>
Zwraca ustawienia określone przez użytkownika, które dotyczą działania rozszerzenia.
Zwroty
-
Promise<UserSettings>
isEnabled()
browser.action.isEnabled(
tabId?: number,
): Promise<boolean>
Wskazuje, czy działanie rozszerzenia jest włączone na karcie (lub globalnie, jeśli nie podano tabId). Działania włączone tylko za pomocą declarativeContent zawsze zwracają wartość false.
Parametry
-
tabId
number optional
Identyfikator karty, której stan włączenia chcesz sprawdzić.
Zwroty
-
Promise<boolean>
openPopup()
browser.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Otwiera wyskakujące okienko rozszerzenia. W Chrome 118–126 ta funkcja jest dostępna tylko w przypadku rozszerzeń zainstalowanych na podstawie zasad.
Parametry
-
Opcje
OpenPopupOptions opcjonalny
Określa opcje otwierania wyskakującego okienka.
Zwroty
-
thought Promise<void>
setBadgeBackgroundColor()
browser.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 tworzą 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, gdzie nieprzezroczysta czerwień to#FF0000lub#F00. -
tabId
number optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
Zwroty
-
thought Promise<void>
setBadgeText()
browser.action.setBadgeText(
details: object,
): Promise<void>
Ustawia tekst plakietki dla działania. Plakietka jest wyświetlana nad ikoną.
Parametry
-
szczegóły
obiekt
-
tabId
number optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
tekst
ciąg znaków opcjonalny
Można przekazać dowolną liczbę znaków, ale w miejscu na nie zmieści się tylko około 4. Jeśli przekazany zostanie pusty ciąg znaków (
''), tekst plakietki zostanie wyczyszczony. Jeśli określono parametrtabId, a parametrtextma wartość null, tekst na określonej karcie zostanie wyczyszczony i domyślnie zostanie użyty tekst globalnej plakietki.
-
Zwroty
-
thought Promise<void>
setBadgeTextColor()
browser.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 tworzą 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, gdzie nieprzezroczysta czerwień to#FF0000lub#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 optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
Zwroty
-
thought Promise<void>
setIcon()
browser.action.setIcon(
details: object,
): Promise<void>
Ustawia ikonę działania. Ikonę można określić jako ścieżkę do pliku graficznego lub jako dane pikseli z elementu canvas albo jako słownik jednego z nich. Należy określić właściwość path lub imageData.
Parametry
-
szczegóły
obiekt
-
imageData
ImageData | obiekt opcjonalny
Obiekt ImageData lub słownik {size -> ImageData} reprezentujący ikonę, która ma zostać ustawiona. Jeśli ikona jest określona jako słownik, rzeczywisty obraz, który zostanie użyty, jest wybierany na podstawie gęstości pikseli ekranu. Jeśli liczba pikseli obrazu, które mieszczą 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ównoważne „details.imageData = {'16': foo}” -
ścieżka
string | object opcjonalny
Względna ścieżka obrazu lub słownik {rozmiar -> względna ścieżka obrazu} wskazujący ikonę, która ma zostać ustawiona. Jeśli ikona jest określona jako słownik, rzeczywisty obraz, który zostanie użyty, jest wybierany na podstawie gęstości pikseli ekranu. Jeśli liczba pikseli obrazu, które mieszczą 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 odpowiednikiem „details.path = {'16': foo}”. -
tabId
number optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
Zwroty
-
thought Promise<void>
Chrome 96 lub nowsza wersja browser.* od Chrome 148
setPopup()
browser.action.setPopup(
details: object,
): Promise<void>
Ustawia dokument HTML, który ma zostać otwarty jako wyskakujące okienko, gdy użytkownik kliknie ikonę działania.
Parametry
-
szczegóły
obiekt
-
wyskakujące okienko
tekst
Ścieżka względna do pliku HTML, który ma się wyświetlać w wyskakującym okienku. Jeśli zasada jest ustawiona na pusty ciąg znaków (
''), wyskakujące okienko nie jest wyświetlane. -
tabId
number optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
Zwroty
-
thought Promise<void>
setTitle()
browser.action.setTitle(
details: object,
): Promise<void>
Ustawia tytuł działania. Pojawi się ona w etykietce.
Parametry
-
szczegóły
obiekt
-
tabId
number optional
Zmiana jest ograniczona do momentu wybrania określonej karty. Automatycznie resetuje się po zamknięciu karty.
-
tytuł
tekst
Ciąg znaków, który powinien się wyświetlać po najechaniu kursorem na działanie.
-
Zwroty
-
thought Promise<void>
Wydarzenia
onClicked
browser.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
browser.action.onUserSettingsChanged.addListener(
callback: function,
)
Uruchamiane, gdy zmieniają się ustawienia określone przez użytkownika, które dotyczą działania rozszerzenia.
Parametry
-
callback
funkcja
Parametr
callbackwygląda tak:(change: UserSettingsChange) => void
-
zmień
-