chrome.action

Opis

Użyj interfejsu chrome.action API, aby sterować ikoną rozszerzenia na pasku narzędzi Google Chrome.

Ikony działań są wyświetlane na pasku narzędzi przeglądarki obok omniboksu. Po zainstalowaniu pojawią się one w menu rozszerzeń (ikona puzzla). Użytkownicy mogą przypiąć ikonę rozszerzenia do paska narzędzi.

Dostępność

Chrome 88 lub nowsza MV3+

Plik manifestu

Aby korzystać z tego interfejsu API, musisz zadeklarować te klucze w pliku manifestu.

"action"

Aby użyć interfejsu chrome.action API, określ "manifest_version" jako 3 i uwzględnij klucz "action"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""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"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 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()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

Chrome 99 lub nowsza

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

Chrome 91 lub nowsza

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

Chrome 130 lub nowsza

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

Zwroty

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

Zwroty

  • Promise<string>

getBadgeTextColor()

Chrome 110 lub nowsza
chrome.action.getBadgeTextColor(
  details: TabDetails,
)
: Promise<extensionTypes.ColorArray>

Pobiera kolor tekstu działania.

Parametry

Zwroty

getPopup()

chrome.action.getPopup(
  details: TabDetails,
)
: Promise<string>

Pobiera dokument HTML ustawiony jako wyskakujące okienko dla tego działania.

Parametry

Zwroty

  • Promise<string>

getTitle()

chrome.action.getTitle(
  details: TabDetails,
)
: Promise<string>

Pobiera tytuł działania.

Parametry

Zwroty

  • Promise<string>

getUserSettings()

Chrome 91 lub nowsza
chrome.action.getUserSettings(): Promise<UserSettings>

Zwraca ustawienia określone przez użytkownika dotyczące działania rozszerzenia.

Zwroty

isEnabled()

Chrome 110 lub nowsza
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 127 lub nowsza
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 110 lub nowsza
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 rozmiarze scale * 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 rozmiarze scale * 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.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (tab: tabs.Tab) => void

onUserSettingsChanged

Chrome 130 lub nowsza
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