browser.action

Opis

Użyj interfejsu API chrome.action, aby kontrolować 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 elementu układanki). Użytkownicy mogą przypiąć ikonę rozszerzenia do paska narzędzi.

Dostępność

Chrome 88 lub nowsza wersja browser.* od Chrome 148 MV3 lub nowsza wersja

Plik manifestu

Aby używać tego interfejsu API, musisz zadeklarować te klucze w pliku manifestu.

"action"

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 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

Chrome 99 lub nowsza wersja browser.* od Chrome 148

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

Chrome 91 lub nowsza browser.* od Chrome 148

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

Chrome 130 lub nowsza browser.* od Chrome 148

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

Zwroty

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

Zwroty

  • Promise<string>

getBadgeTextColor()

Chrome 110 lub nowsza browser.* od Chrome 148
browser.action.getBadgeTextColor(
  details: TabDetails,
)
: Promise<extensionTypes.ColorArray>

Pobiera kolor tekstu działania.

Parametry

Zwroty

getPopup()

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

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

Parametry

Zwroty

  • Promise<string>

getTitle()

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

Pobiera tytuł działania.

Parametry

Zwroty

  • Promise<string>

getUserSettings()

Chrome 91 lub nowsza browser.* od Chrome 148
browser.action.getUserSettings(): Promise<UserSettings>

Zwraca ustawienia określone przez użytkownika, które dotyczą działania rozszerzenia.

Zwroty

isEnabled()

Chrome 110 lub nowsza browser.* od Chrome 148
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()

Chrome 127 lub nowsza browser.* od Chrome 148
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 #FF0000 lub #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 parametr tabId, a parametr text ma wartość null, tekst na określonej karcie zostanie wyczyszczony i domyślnie zostanie użyty tekst globalnej plakietki.

Zwroty

  • thought Promise<void>

setBadgeTextColor()

Chrome 110 lub nowsza browser.* od Chrome 148
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 #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 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 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ó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 rozmiarze scale * 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.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (tab: tabs.Tab) => void

onUserSettingsChanged

Chrome 130 lub nowsza browser.* od Chrome 148
browser.action.onUserSettingsChanged.addListener(
  callback: function,
)

Uruchamiane, gdy zmieniają się ustawienia określone przez użytkownika, które dotyczą działania rozszerzenia.

Parametry