Opis
Za pomocą interfejsu API poleceń możesz dodawać skróty klawiszowe wywołujące działania w rozszerzeniu, np. działanie powodujące otwarcie działania w przeglądarce lub wysłanie do rozszerzenia polecenia.
Plik manifestu
Aby można było używać tego interfejsu API, następujące klucze muszą być zadeklarowane w pliku manifestu.
"commands"
Wykorzystanie
Interfejs Commands API umożliwia programistom rozszerzeń definiowanie konkretnych poleceń i powiązanie ich z domyślną kombinacją klawiszy. Każde polecenie zaakceptowane przez rozszerzenie musi być zadeklarowane jako właściwości obiektu "commands"
w pliku manifestu rozszerzenia.
Jako nazwę polecenia używany jest klucz właściwości. Obiekty poleceń mogą mieć 2 właściwości.
suggested_key
Opcjonalna właściwość, która określa domyślne skróty klawiszowe polecenia. Jeśli go pominiesz, polecenie pozostanie usunięte. Ta właściwość może przyjmować wartość ciągu lub obiektu.
Wartość ciągu określa domyślny skrót klawiszowy, którego należy używać na wszystkich platformach.
Wartość obiektu umożliwia deweloperowi rozszerzenia dostosowanie skrótów klawiszowych do poszczególnych platform. W przypadku skrótów na poszczególnych platformach prawidłowymi właściwościami obiektu są
default
,chromeos
,linux
,mac
iwindows
.
Więcej informacji znajdziesz w sekcji Wymagania dotyczące kombinacji kluczy.
description
Ciąg tekstowy służący do przekazania użytkownikowi krótkiego opisu przeznaczenia polecenia. Ten ciąg pojawia się w interfejsie zarządzania skrótami klawiszowymi w rozszerzeniu. Opisy są wymagane w przypadku standardowych poleceń, ale są one ignorowane w przypadku poleceń działania.
Rozszerzenie może mieć wiele poleceń, ale możesz określić maksymalnie 4 sugerowane skróty klawiszowe. Użytkownik może ręcznie dodać więcej skrótów w oknie chrome://extensions/shortcuts
.
Obsługiwane klucze
Podane niżej klawisze to przydatne skróty poleceń. W głównych definicjach wielkość liter ma znaczenie. Próba wczytania rozszerzenia z nieprawidłowo zastosowanym kluczem spowoduje wyświetlenie błędu analizy pliku manifestu podczas instalacji.
- Klucze alfa
A
...Z
- Klawisze numeryczne
0
...9
- Standardowe ciągi kluczy
Ogólne –
Comma
,Period
,Home
,End
,PageUp
,PageDown
,Space
,Insert
,Delete
Klawisze strzałek –
Up
,Down
,Left
,Right
Klawisze multimedialne –
MediaNextTrack
,MediaPlayPause
,MediaPrevTrack
,MediaStop
- Ciągi klawiszy modyfikujących
Ctrl
,Alt
(Option
w systemie macOS),Shift
,MacCtrl
(tylko macOS),Command
(tylko macOS),Search
(tylko ChromeOS)
Wymagania dotyczące kombinacji kluczy
Skróty polecenia rozszerzenia muszą zawierać
Ctrl
lubAlt
.- Modyfikatorów nie można używać razem z kluczami multimediów.
W systemie macOS
Ctrl
jest automatycznie konwertowany naCommand
.Aby użyć klawisza Control w macOS, zastąp
Ctrl
elementemMacCtrl
podczas definiowania skrótu"mac"
.Użycie połączenia
MacCtrl
w połączeniu z inną platformą spowoduje błąd weryfikacji i uniemożliwi zainstalowanie rozszerzenia.
Shift
to opcjonalny modyfikator na wszystkich platformach.Search
to opcjonalny modyfikator dostępny tylko w ChromeOS.Niektóre skróty w systemie operacyjnym i Chrome (np. zarządzanie oknami) zawsze mają wyższy priorytet niż skróty poleceń rozszerzeń i nie można ich zastąpić.
Obsługa zdarzeń poleceń
manifest.json:
{
"name": "My extension",
...
"commands": {
"run-foo": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y"
},
"description": "Run \"foo\" on the current page."
},
"_execute_action": {
"suggested_key": {
"windows": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y",
"chromeos": "Ctrl+Shift+U",
"linux": "Ctrl+Shift+J"
}
}
},
...
}
W skrypcie service worker możesz powiązać moduł obsługi z każdym poleceniam określonym w pliku manifestu za pomocą polecenia onCommand.addListener
. Na przykład:
service-worker.js:
chrome.commands.onCommand.addListener((command) => {
console.log(`Command: ${command}`);
});
Polecenia działania
Polecenia _execute_action
(plik manifestu w wersji 3), _execute_browser_action
(Manifest V2) i _execute_page_action
(Manifest V2) są zarezerwowane odpowiednio dla działania wywołującego działanie,
przeglądarkę lub stronę. Polecenia te nie wysyłają zdarzeń command.onCommand, takich jak polecenia standardowe.
Jeśli musisz podjąć działanie zależnie od otwarcia wyskakującego okienka, rozważ nasłuchiwanie zdarzenia DOMContentLoaded w kodzie JavaScript wyskakującego okienka.
Zakres
Domyślnie polecenia są ograniczone do przeglądarki Chrome. Oznacza to, że gdy nie jest zaznaczone w przeglądarce, skróty poleceń są nieaktywne. Począwszy od Chrome 35, deweloperzy rozszerzeń mogą opcjonalnie oznaczać polecenie jako „globalne”. Polecenia globalne działają też wtedy, gdy nie jest zaznaczone w Chrome.
Sugestie skrótów klawiszowych dla poleceń globalnych są ograniczone do Ctrl+Shift+[0..9]
. Jest to środek ochronny mający na celu zminimalizowanie ryzyka zastąpienia skrótów w innych aplikacjach. Gdyby na przykład Alt+P
był przyznany jako globalny, skrót klawiszowy otwierający okno drukowania może nie działać w innych aplikacjach.
Użytkownicy mogą zmieniać polecenia globalne na preferowaną kombinację klawiszy, korzystając z interfejsu dostępnego na stronie chrome://extensions/shortcuts
.
Przykład:
manifest.json:
{
"name": "My extension",
...
"commands": {
"toggle-feature-foo": {
"suggested_key": {
"default": "Ctrl+Shift+5"
},
"description": "Toggle feature foo",
"global": true
}
},
...
}
Przykłady
W podanych niżej przykładach udoskonalono podstawową funkcjonalność interfejsu Commands API.
Polecenie podstawowe
Polecenia umożliwiają rozszerzeniom mapowanie logiki na skróty klawiszowe, które mogą być wywoływane przez użytkownika. Ogólnie rzecz biorąc, polecenie wymaga deklaracji polecenia w pliku manifestu rozszerzenia i rejestracji odbiornika, tak jak w tym przykładzie.
manifest.json:
{
"name": "Command demo - basic",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "service-worker.js"
},
"commands": {
"inject-script": {
"suggested_key": "Ctrl+Shift+Y",
"description": "Inject a script on the page"
}
}
}
service-worker.js:
chrome.commands.onCommand.addListener((command) => {
console.log(`Command "${command}" triggered`);
});
Polecenie działania
Jak opisano w sekcji Użycie, możesz też zmapować polecenie na działanie rozszerzenia. Poniższy przykład wprowadza skrypt treści, który wyświetla alert na bieżącej stronie, gdy użytkownik kliknie działanie rozszerzenia lub uruchomi skrót klawiszowy.
manifest.json:
{
"name": "Commands demo - action invocation",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "service-worker.js"
},
"permissions": ["activeTab", "scripting"],
"action": {},
"commands": {
"_execute_action": {
"suggested_key": {
"default": "Ctrl+U",
"mac": "Command+U"
}
}
}
}
service-worker.js:
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: {tabId: tab.id},
func: contentScriptFunc,
args: ['action'],
});
});
function contentScriptFunc(name) {
alert(`"${name}" executed`);
}
// This callback WILL NOT be called for "_execute_action"
chrome.commands.onCommand.addListener((command) => {
console.log(`Command "${command}" called`);
});
Sprawdź, czy polecenia zostały zarejestrowane
Jeśli rozszerzenie spróbuje zarejestrować skrót, który jest już używany przez inne rozszerzenie, skrót drugiego rozszerzenia nie zostanie zarejestrowany zgodnie z oczekiwaniami. Możesz zwiększyć bezpieczeństwo użytkowników, przewidując taką możliwość i sprawdzając występowanie kolizji podczas instalacji.
service-worker.js:
chrome.runtime.onInstalled.addListener((reason) => {
if (reason === chrome.runtime.OnInstalledReason.INSTALL) {
checkCommandShortcuts();
}
});
// Only use this function during the initial install phase. After
// installation the user may have intentionally unassigned commands.
function checkCommandShortcuts() {
chrome.commands.getAll((commands) => {
let missingShortcuts = [];
for (let {name, shortcut} of commands) {
if (shortcut === '') {
missingShortcuts.push(name);
}
}
if (missingShortcuts.length > 0) {
// Update the extension UI to inform the user that one or more
// commands are currently unassigned.
}
});
}
Typy
Command
Właściwości
-
opis
ciąg znaków opcjonalny
Opis polecenia rozszerzenia
-
nazwa
ciąg znaków opcjonalny
Nazwa polecenia rozszerzenia
-
skrót
ciąg znaków opcjonalny
Skrót aktywny dla tego polecenia lub pusty, jeśli nie jest aktywny.
Metody
getAll()
chrome.commands.getAll(
callback?: function,
)
Zwraca wszystkie zarejestrowane polecenia rozszerzenia związane z danym rozszerzeniem oraz jego skrót (jeśli jest aktywny). Przed Chrome 110 to polecenie nie zwracało wartości _execute_action
.
Parametry
-
wywołanie zwrotne
funkcja opcjonalnie
Parametr
callback
wygląda tak:(commands: Command[]) => void
-
polecenia
-
Akcje powrotne
-
Obietnica<Command[]>
Chrome 96 i nowsze wersjeObietnice są obsługiwane tylko w przypadku platformy Manifest V3 i nowszych platform. Inne platformy muszą używać wywołań zwrotnych.
Wydarzenia
onCommand
chrome.commands.onCommand.addListener(
callback: function,
)
Uruchamiane, gdy zarejestrowane polecenie zostanie aktywowane za pomocą skrótu klawiszowego.