Описание
Используйте API chrome.action
для управления значком расширения на панели инструментов Google Chrome.
Доступность
Манифест
Чтобы использовать API chrome.action
, укажите "manifest_version"
3
и включите ключ "action"
в файл манифеста .
{
"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
},
...
}
Клавиша "action"
(вместе с дочерними клавишами) необязательна. Если она отсутствует, ваше расширение всё равно отображается на панели инструментов, обеспечивая доступ к меню расширения. Поэтому мы рекомендуем всегда добавлять как минимум клавиши "action"
и "default_icon"
.
Концепции и использование
Части пользовательского интерфейса
Икона
Значок — это основное изображение на панели инструментов вашего расширения, которое задаётся ключом "default_icon"
в ключе "action"
вашего манифеста. Ширина и высота значков должны составлять 16 аппаратно-независимых пикселей (DIP).
Ключ "default_icon"
— это словарь размеров путей к изображениям. Chrome использует эти значки для выбора масштаба изображения. Если точное совпадение не найдено, Chrome выбирает ближайшее доступное изображение и масштабирует его в соответствии с изображением, что может повлиять на качество изображения.
Поскольку устройства с менее распространёнными коэффициентами масштабирования, такими как 1,5x или 1,2x, становятся всё более распространёнными, мы рекомендуем вам предоставлять значки разных размеров. Это также защитит ваше расширение от возможных изменений размера отображаемых значков в будущем. Однако, если вы предоставляете только один размер, ключ "default_icon"
можно также задать как строку с путём к одному значку вместо словаря.
Вы также можете вызвать action.setIcon()
, чтобы программно установить значок расширения, указав другой путь к изображению или предоставив динамически сгенерированный значок с помощью элемента HTML-холста или, если настройка выполняется из работника службы расширения, API-интерфейса offscreen-холста .
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}, () => { /* ... */ });
Для упакованных расширений (установленных из CRX-файла) изображения могут быть в большинстве форматов, поддерживаемых движком рендеринга Blink, включая PNG, JPEG, BMP, ICO и другие. Формат SVG не поддерживается. Распакованные расширения должны использовать изображения в формате PNG.
Подсказка (заголовок)
Подсказка (или заголовок) появляется, когда пользователь наводит указатель мыши на значок расширения на панели инструментов. Она также включается в доступный текст, озвучиваемый программами чтения с экрана при выборе кнопки.
Подсказка по умолчанию задаётся с помощью поля "default_title"
ключа "action"
в manifest.json
. Вы также можете задать её программно, вызвав action.setTitle()
.
Значок
Действия могут отображать «бейдж» — текстовый слой, наложенный поверх значка. Это позволяет обновлять действие, чтобы отображать небольшую информацию о состоянии расширения, например, счётчик. Бейдж состоит из текстового компонента и имеет цвет фона. Поскольку пространство ограничено, мы рекомендуем использовать для текста бейджа не более четырёх символов.
Чтобы создать значок, задайте его программно, вызвав методы action.setBadgeBackgroundColor()
и action.setBadgeText()
. В манифесте нет настроек для значка по умолчанию. Значения цвета значка могут быть либо массивом из четырёх целых чисел от 0 до 255, которые задают цвет значка в формате RGBA, либо строкой со значением цвета в 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
() => { /* ... */ },
);
Неожиданно возникнуть
Всплывающее окно действия отображается при нажатии пользователем кнопки действия расширения на панели инструментов. Всплывающее окно может содержать любой HTML-контент по вашему выбору и автоматически подстраивается под его размер. Размер всплывающего окна должен быть от 25x25 до 800x600 пикселей.
Всплывающее окно изначально задаётся свойством "default_popup"
в ключе "action"
файла manifest.json
. Если это свойство присутствует, оно должно указывать на относительный путь в каталоге расширения. Его также можно динамически обновлять, чтобы оно указывало на другой относительный путь, с помощью метода action.setPopup()
.
Варианты использования
Состояние каждой вкладки
Действия расширения могут иметь разные состояния для каждой вкладки. Чтобы задать значение для отдельной вкладки, используйте свойство tabId
в методах настройки API action
. Например, чтобы задать текст значка для конкретной вкладки, выполните следующие действия:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
chrome.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
Если свойство tabId
не указано, настройка рассматривается как глобальная. Настройки, специфичные для вкладки, имеют приоритет над глобальными настройками.
Включенное состояние
По умолчанию действия на панели инструментов включены (активны) на каждой вкладке. Вы можете изменить это значение, установив свойство default_state
в ключе action
манифеста. Если default_state
имеет значение "disabled"
, действие по умолчанию отключено и должно быть включено программно, чтобы стать активным. Если default_state
имеет значение "enabled"
(по умолчанию), действие включено и активируется по умолчанию.
Вы можете программно управлять состоянием с помощью методов action.enable()
и action.disable()
. Это влияет только на отправку всплывающего окна (если оно есть) или события action.onClicked
вашему расширению; это не влияет на наличие действия на панели инструментов.
Примеры
В следующих примерах показаны некоторые распространённые способы использования действий в расширениях. Чтобы опробовать этот API, установите пример Action API из репозитория chrome-extension-samples .
Показать всплывающее окно
Расширение часто отображает всплывающее окно, когда пользователь нажимает на действие расширения. Чтобы реализовать это в своём расширении, объявите всплывающее окно в файле manifest.json
и укажите, что Chrome должен отображать во всплывающем окне.
// 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>
Вставить скрипт контента по клику
Распространенный шаблон для расширений — раскрытие своей основной функции с помощью действия расширения. Следующий пример демонстрирует этот шаблон. Когда пользователь нажимает на действие, расширение внедряет скрипт контента на текущую страницу. Затем скрипт контента отображает предупреждение, чтобы убедиться, что всё работает как надо.
// 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!');
Эмулируйте действия с помощью declarativeContent
В этом примере показано, как фоновая логика расширения может (а) отключить действие по умолчанию и (б) использовать declarativeContent для включения действия на определенных сайтах.
// 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);
});
});
Типы
OpenPopupOptions
Характеристики
- windowId
номер необязательно
Идентификатор окна, в котором нужно открыть всплывающее окно действия. Если не указано иное, по умолчанию используется текущее активное окно.
TabDetails
Характеристики
- tabId
номер необязательно
Идентификатор вкладки, состояние которой запрашивается. Если вкладка не указана, возвращается состояние, не связанное с данной вкладкой.
UserSettings
Коллекция пользовательских настроек, относящихся к действию расширения.
Характеристики
- isOnToolbar
булев
Виден ли значок действия расширения на верхней панели инструментов окна браузера (т. е. было ли расширение «закреплено» пользователем).
UserSettingsChange
Характеристики
- isOnToolbar
логическое необязательное
Виден ли значок действия расширения на верхней панели инструментов окна браузера (т. е. было ли расширение «закреплено» пользователем).
Методы
disable()
chrome.action.disable(
tabId?: number,
): Promise<void>
Отключает действие для вкладки.
Параметры
- tabId
номер необязательно
Идентификатор вкладки, для которой вы хотите изменить действие.
Возврат
Обещание<void>
enable()
chrome.action.enable(
tabId?: number,
): Promise<void>
Включает действие для вкладки. По умолчанию действия включены.
Параметры
- tabId
номер необязательно
Идентификатор вкладки, для которой вы хотите изменить действие.
Возврат
Обещание<void>
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Получает цвет фона действия.
Параметры
- подробности
Возврат
Обещание< extensionTypes.ColorArray >
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
): Promise<string>
Получает текст значка действия. Если вкладка не указана, возвращается текст значка, не относящийся к вкладке. Если включено displayActionCountAsBadgeText , возвращается текст-заполнитель, если только не указано разрешение declarativeNetRequestFeedback или не был указан текст значка, относящийся к вкладке.
Параметры
- подробности
Возврат
Обещание<строка>
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Получает цвет текста действия.
Параметры
- подробности
Возврат
Обещание< extensionTypes.ColorArray >
getPopup()
chrome.action.getPopup(
details: TabDetails,
): Promise<string>
Получает HTML-документ, установленный в качестве всплывающего окна для этого действия.
Параметры
- подробности
Возврат
Обещание<строка>
getTitle()
chrome.action.getTitle(
details: TabDetails,
): Promise<string>
Получает название действия.
Параметры
- подробности
Возврат
Обещание<строка>
getUserSettings()
chrome.action.getUserSettings(): Promise<UserSettings>
Возвращает заданные пользователем настройки, относящиеся к действию расширения.
Возврат
Обещание< Настройки пользователя >
isEnabled()
chrome.action.isEnabled(
tabId?: number,
): Promise<boolean>
Указывает, включено ли действие расширения для вкладки (или глобально, если tabId
не указан). Действия, включенные только с использованием declarativeContent
, всегда возвращают значение false.
Параметры
- tabId
номер необязательно
Идентификатор вкладки, для которой вы хотите проверить статус включения.
Возврат
Обещание<логическое>
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Открывает всплывающее окно расширения. В версиях Chrome 118 и 126 эта функция доступна только для установленных расширений.
Параметры
- параметры
OpenPopupOptions необязательно
Задает параметры открытия всплывающего окна.
Возврат
Обещание<void>
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
): Promise<void>
Устанавливает цвет фона для значка.
Параметры
- подробности
объект
- цвет
строка | ColorArray
Массив из четырёх целых чисел в диапазоне [0,255], задающих цвет значка в формате RGBA. Например, непрозрачный красный — это
[255, 0, 0, 255]
. Также может быть строкой со значением CSS, где непрозрачный красный — это#FF0000
или#F00
. - tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
Возврат
Обещание<void>
setBadgeText()
chrome.action.setBadgeText(
details: object,
): Promise<void>
Задаёт текст значка для действия. Значок отображается поверх значка.
Параметры
- подробности
объект
- tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
- текст
строка необязательная
Можно передать любое количество символов, но в поле помещается не более четырёх. Если передана пустая строка (
''
), текст значка очищается. Если указанtabId
, аtext
равен null, текст для указанной вкладки очищается и по умолчанию используется глобальный текст значка.
Возврат
Обещание<void>
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
): Promise<void>
Задает цвет текста для значка.
Параметры
- подробности
объект
- цвет
строка | ColorArray
Массив из четырёх целых чисел в диапазоне [0,255], определяющих цвет значка в формате RGBA. Например, непрозрачный красный — это
[255, 0, 0, 255]
. Также может быть строкой со значением CSS, где непрозрачный красный — это#FF0000
или#F00
. Если это значение не задано, будет автоматически выбран цвет, контрастный с фоновым цветом значка, чтобы текст был виден. Цвета со значениями альфа, эквивалентными 0, не будут установлены и вернут ошибку. - tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
Возврат
Обещание<void>
setIcon()
chrome.action.setIcon(
details: object,
): Promise<void>
Задаёт значок для действия. Значок может быть указан либо как путь к файлу изображения, либо как данные пикселей из элемента холста, либо как словарь одного из этих значений. Необходимо указать либо путь , либо свойство imageData .
Параметры
- подробности
объект
- imageData
ImageData | объект необязательный
Объект ImageData или словарь {size -> ImageData}, представляющий значок, который необходимо установить. Если значок указан как словарь, фактическое изображение выбирается в зависимости от плотности пикселей экрана. Если количество пикселей изображения, помещающихся в одну единицу экранного пространства, равно
scale
, то будет выбрано изображение размеромscale
* n, где n — размер значка в пользовательском интерфейсе. Необходимо указать хотя бы одно изображение. Обратите внимание, что 'details.imageData = foo' эквивалентно 'details.imageData = {'16': foo}' - путь
строка | объект необязательно
Относительный путь к изображению или словарь {size -> relative image path}, указывающий на значок, который необходимо установить. Если значок указан как словарь, фактическое изображение выбирается в зависимости от плотности пикселей экрана. Если количество пикселей изображения, помещающихся в одну единицу экранного пространства, равно
scale
, то будет выбрано изображение размеромscale
* n, где n — размер значка в пользовательском интерфейсе. Необходимо указать хотя бы одно изображение. Обратите внимание, что 'details.path = foo' эквивалентно 'details.path = {'16': foo}' - tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
Возврат
Обещание<void>
Хром 96+
setPopup()
chrome.action.setPopup(
details: object,
): Promise<void>
Устанавливает, что HTML-документ будет открываться как всплывающее окно, когда пользователь нажимает на значок действия.
Параметры
- подробности
объект
- неожиданно возникнуть
нить
Относительный путь к HTML-файлу, который будет отображаться во всплывающем окне. Если задано пустое значение (
''
), всплывающее окно не отображается. - tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
Возврат
Обещание<void>
setTitle()
chrome.action.setTitle(
details: object,
): Promise<void>
Задаёт название действия. Оно отображается в подсказке.
Параметры
- подробности
объект
- tabId
номер необязательно
Ограничивает изменение выбором определенной вкладки. Автоматически сбрасывается при закрытии вкладки.
- заголовок
нить
Строка, которую действие должно отображать при наведении курсора мыши.
Возврат
Обещание<void>
События
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
Срабатывает при нажатии на значок действия. Это событие не срабатывает, если действие содержит всплывающее окно.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(tab: tabs.Tab) => void
- вкладка
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
Срабатывает при изменении указанных пользователем настроек, относящихся к действию расширения.
Параметры
- перезвонить
функция
Параметр
callback
выглядит так:(change: UserSettingsChange) => void
- изменять