Interfejs rozszerzenia powinien być jak najbardziej świadomy i ograniczony do minimum. Podobnie jak w przypadku rozszerzeń, Interfejs powinien dostosowywać i ulepszać przeglądanie bez rozpraszania jego uwagi.
W tym przewodniku omawiamy wymagane i opcjonalne funkcje interfejsu użytkownika. Dzięki temu dowiesz się, jak i kiedy , aby zaimplementować różne elementy interfejsu w rozszerzeniu.
Aktywuj rozszerzenie na wszystkich stronach
Użyj parametru browser_action, jeśli funkcje rozszerzenia działają w większości sytuacji.
Zarejestruj działanie przeglądarki
Pole "browser_action" jest zarejestrowane w pliku manifestu.
{
"name": "My Awesome browser_action Extension",
...
"browser_action": {
...
}
...
}
Zadeklarowanie "browser_action" powoduje zmianę koloru ikony, co oznacza, że rozszerzenie jest dostępne dla:
użytkowników.
Dodaj plakietkę
Plakietki wyświetlają kolorowy baner z maksymalnie czterema znakami nad ikoną przeglądarki. Mają dostęp tylko do
być używane przez rozszerzenia, które w pliku manifestu zadeklarują "browser_action".
Używaj plakietek do wskazywania stanu rozszerzenia. W przykładzie Zdarzenie woda do spożycia wyświetlane jest: plakietka z napisem „WŁĄCZONE” aby pokazać użytkownikowi, że udało się ustawić alarm, i nie wyświetla niczego, gdy jest nieaktywne.


Ustaw tekst plakietki, wywołując parametr chrome.browserAction.setBadgeText i podając kolor banera
, dzwoniąc pod numer chrome.browserAction.setBadgeBackgroundColor .
chrome.browserAction.setBadgeText({text: 'ON'});
chrome.browserAction.setBadgeBackgroundColor({color: '#4688F1'});
Aktywuj rozszerzenie na wybranych stronach
Użyj parametru page_action, gdy funkcje rozszerzenia są dostępne tylko w określonych okolicznościach.
Zadeklaruj działanie na stronie
Pole "page_action" jest zarejestrowane w pliku manifestu.
{
"name": "My Awesome page_action Extension",
...
"page_action": {
...
}
...
}
Zadeklarowanie "page_action" spowoduje kolorowanie ikony tylko wtedy, gdy rozszerzenie jest dostępne dla użytkowników.
W przeciwnym razie będzie wyświetlany w skali szarości.
![]()
![]()
Zdefiniuj reguły aktywowania rozszerzenia
Aby określić reguły korzystania z rozszerzenia, wywołaj chrome.declarativeContent w komponencie
runtime.onInstalled w skrypcie w tle. Przykład Działania na stronie według adresu URL
określa warunek, że URL musi zawierać „g”. Jeśli warunek jest spełniony, rozszerzenie
połączenia: declarativeContent.ShowPageAction().
chrome.runtime.onInstalled.addListener(function() {
// Replace all rules ...
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
// With a new rule ...
chrome.declarativeContent.onPageChanged.addRules([
{
// That fires when a page's URL contains a 'g' ...
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { urlContains: 'g' },
})
],
// And shows the extension's page action.
actions: [ new chrome.declarativeContent.ShowPageAction() ]
}
]);
});
});
Włączanie i wyłączanie rozszerzenia
Rozszerzenia korzystające z interfejsu "page_action" mogą aktywować i wyłączać je dynamicznie, wywołując
pageAction.show i pageAction.hide.
Przykładowe rozszerzenie Mappy skanuje stronę internetową pod kątem adresu i pokazuje jego lokalizację na statycznym tle.
mapę w wyskakującym okienku. Rozszerzenie zależy od treści strony, więc nie może zadeklarować reguł.
aby przewidzieć, które strony będą trafne. Zamiast tego po znalezieniu adresu na stronie wywołuje go.
pageAction.show, aby kolorować ikonę i określić, że na tej karcie można używać rozszerzenia.
chrome.runtime.onMessage.addListener(function(req, sender) {
chrome.storage.local.set({'address': req.address})
chrome.pageAction.show(sender.tab.id);
chrome.pageAction.setTitle({tabId: sender.tab.id, title: req.address});
});
Dodaj ikony rozszerzeń
Rozszerzenia wymagają do reprezentowania co najmniej 1 ikony. Dostarczaj ikony w najlepszym formacie PNG wyników wizualnych, chociaż każdy format obsługiwany przez WebKit, w tym BMP, GIF, ICO czy JPEG, zaakceptowano.
Wskaż ikony na pasku narzędzi
Ikony dla paska narzędzi są zarejestrowane w polu "default_icon" pod adresem
browser_action lub page_action w pliku manifestu. Uwzględnienie wielu rozmiarów
zachęcano do korzystania
z przestrzeni 16 dip. Zalecane są co najmniej rozmiary 16 x 16 i 32 x 32.
{
"name": "My Awesome page_action Extension",
...
"page_action": {
"default_icon": {
"16": "extension_toolbar_icon16.png",
"32": "extension_toolbar_icon32.png"
}
}
...
}
Wszystkie ikony powinny być kwadratowe – w przeciwnym razie mogą być zniekształcone. Jeśli nie zostaną udostępnione żadne ikony, Chrome doda ikonę na pasek narzędzi.
Tworzenie i rejestrowanie dodatkowych ikon
Dołącz dodatkowe ikony w poniższych rozmiarach do użytku poza paskiem narzędzi.
| Rozmiar ikony | Użycie ikony |
|---|---|
| 16 × 16 | favikona na stronach rozszerzenia |
| 32 × 32 | Komputery z systemem Windows często wymagają tego rozmiaru. Jeśli zapewnisz tę opcję, zapobiegnie to zniekształceniu rozmiaru, który nie będzie zmniejszał opcji 48 x 48. |
| 48 × 48 | Wyświetlane na stronie zarządzania rozszerzeniami |
| 128 × 128 | jest wyświetlana podczas instalacji i w sklepie Chrome Web Store |
Zarejestruj ikony w pliku manifestu w polu "icons".
{
"name": "My Awesome Extension",
...
"icons": {
"16": "extension_icon16.png",
"32": "extension_icon32.png",
"48": "extension_icon48.png",
"128": "extension_icon128.png"
}
...
}
Dodatkowe funkcje interfejsu
Wyskakujące okienko
Wyskakujące okienko to plik HTML, który jest wyświetlany w specjalnym oknie po kliknięciu przez użytkownika ikony na pasku narzędzi. Wyskakujące okienko działa bardzo podobnie do strony internetowej, może zawierać linki do arkuszy stylów i tagów skryptów, ale nie zezwala na wbudowany kod JavaScript.
W wyskakującym okienku Picie wody wyświetlają się dostępne opcje minutnika. Użytkownicy ustawili alarm przez klikając jeden z dostępnych przycisków.

<html>
<head>
<title>Water Popup</title>
</head>
<body>
<img src='./stay_hydrated.png' id='hydrateImage'>
<button id='sampleSecond' value='0.1'>Sample Second</button>
<button id='15min' value='15'>15 Minutes</button>
<button id='30min' value='30'>30 Minutes</button>
<button id='cancelAlarm'>Cancel Alarm</button>
<script src="popup.js"></script>
</body>
</html>
Wyskakujące okienko można zarejestrować w pliku manifestu, w ramach czynności przeglądarki lub strony.
{
"name": "Drink Water Event",
...
"browser_action": {
"default_popup": "popup.html"
}
...
}
Wyskakujące okienka można też ustawić dynamicznie, wywołując metodę browserAction.setPopup lub
pageAction.setPopup
chrome.storage.local.get('signed_in', function(data) {
if (data.signed_in) {
chrome.browserAction.setPopup({popup: 'popup.html'});
} else {
chrome.browserAction.setPopup({popup: 'popup_sign_in.html'});
}
});
Etykietka
Użyj etykietki, aby podać użytkownikom krótkie opisy lub instrukcje po najechaniu kursorem na przeglądarkę .

Etykietki są zarejestrowane w polu "default_title" browser_action lub page_action
w pliku manifestu.
{
"name": "Tab Flipper",
...
"browser_action": {
"default_title": "Press Ctrl(Win)/Command(Mac)+Shift+Right/Left to flip tabs"
}
...
}
Etykietki można też ustawiać lub aktualizować, wywołując metodę browserAction.setTitle i
pageAction.setTitle
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.browserAction.setTitle({tabId: tab.id, title: "You are on tab:" + tab.id});
});
Ciągi tekstowe dotyczące specjalizacji są zaimplementowane za pomocą internacjonalizacji. Utwórz katalogi, aby
wiadomości specyficzne dla języka autoreklamy w folderze _locales, na przykład:
_locales/en/messages.json_locales/es/messages.json
Formatuj wiadomości w polach messages.json poszczególnych języków.
{
"__MSG_tooltip__": {
"message": "Hello!",
"description": "Tooltip Greeting."
}
}
{
"__MSG_tooltip__": {
"message": "Hola!",
"description": "Tooltip Greeting."
}
}
Aby umożliwić lokalizację, podaj w polu etykietki nazwę wiadomości zamiast komunikatu.
{
"name": "Tab Flipper",
...
"browser_action": {
"default_title": "__MSG_tooltip__"
}
...
}
omniboks
Użytkownicy mogą wywołać funkcję rozszerzenia za pomocą omniboksu. Uwzględnij pole "omnibox" w:
plik manifestu i wyznacz słowo kluczowe. Przykładowe rozszerzenie Wyszukiwanie nowej karty w omniboksie używa „nt” jako
słowo kluczowe.
{
"name": "Omnibox New Tab Search",\
...
"omnibox": { "keyword" : "nt" },
"default_icon": {
"16": "newtab_search16.png",
"32": "newtab_search32.png"
}
...
}
Gdy użytkownik wpisze „nt” z omniboksu, aktywuje rozszerzenie. Aby zasygnalizować to użytkownikowi, zmieni kolor ikony o wymiarach 16 x 16 na szarość i zostanie umieszczona w omniboksie obok nazwy rozszerzenia.

Rozszerzenie nasłuchuje zdarzenia omnibox.onInputEntered. Po wywołaniu
to rozszerzenie otwiera nową kartę zawierającą wpis użytkownika w wyszukiwarce Google.
chrome.omnibox.onInputEntered.addListener(function(text) {
// Encode user input for special characters , / ? : @ & = + $ #
var newURL = 'https://www.google.com/search?q=' + encodeURIComponent(text);
chrome.tabs.create({ url: newURL });
});
Menu kontekstowe
Dodaj nowe opcje menu kontekstowego, przyznając w pliku manifestu uprawnienia "contextMenus".
{
"name": "Global Google Search",
...
"permissions": [
"contextMenus",
"storage"
],
"icons": {
"16": "globalGoogle16.png",
"48": "globalGoogle48.png",
"128": "globalGoogle128.png"
}
...
}
Ikona 16 x 16 jest wyświetlana obok nowej pozycji menu.
![]()
Utwórz menu kontekstowe, wywołując metodę contextMenus.create w skrypcie działającym w tle. Ten
należy wykonać w zdarzeniu detektora runtime.onInstalled.
chrome.runtime.onInstalled.addListener(function() {
for (let key of Object.keys(kLocales)) {
chrome.contextMenus.create({
id: key,
title: kLocales[key],
type: 'normal',
contexts: ['selection'],
});
}
});
const kLocales = {
'com.au': 'Australia',
'com.br': 'Brazil',
'ca': 'Canada',
'cn': 'China',
'fr': 'France',
'it': 'Italy',
'co.in': 'India',
'co.jp': 'Japan',
'com.ms': 'Mexico',
'ru': 'Russia',
'co.za': 'South Africa',
'co.uk': 'United Kingdom'
};
Przykład menu kontekstowego wyszukiwarki Google tworzy wiele opcji z listy w locales.js . Jeśli rozszerzenie zawiera więcej niż jedno menu kontekstowe, przeglądarka Google Chrome automatycznie zwija je w jedno menu nadrzędne.

Polecenia
Rozszerzenia mogą definiować określone polecenia i wiązać je z kombinacją klawiszy. Zarejestruj jeden lub
więcej poleceń w pliku manifestu w polu "commands".
{
"name": "Tab Flipper",
...
"commands": {
"flip-tabs-forward": {
"suggested_key": {
"default": "Ctrl+Shift+Right",
"mac": "Command+Shift+Right"
},
"description": "Flip tabs forward"
},
"flip-tabs-backwards": {
"suggested_key": {
"default": "Ctrl+Shift+Left",
"mac": "Command+Shift+Left"
},
"description": "Flip tabs backwards"
}
}
...
}
Polecenia mogą służyć do tworzenia nowych lub alternatywnych skrótów przeglądarki. Przykład: Tab Flipper
rozszerzenie nasłuchuje zdarzenia commands.onCommand w skrypcie w tle i określa
dla każdej zarejestrowanej kombinacji.
chrome.commands.onCommand.addListener(function(command) {
chrome.tabs.query({currentWindow: true}, function(tabs) {
// Sort tabs according to their index in the window.
tabs.sort((a, b) => { return a.index < b.index; });
let activeIndex = tabs.findIndex((tab) => { return tab.active; });
let lastTab = tabs.length - 1;
let newIndex = -1;
if (command === 'flip-tabs-forward')
newIndex = activeIndex === 0 ? lastTab : activeIndex - 1;
else // 'flip-tabs-backwards'
newIndex = activeIndex === lastTab ? 0 : activeIndex + 1;
chrome.tabs.update(tabs[newIndex].id, {active: true, highlighted: true});
});
});
Polecenia mogą też tworzyć powiązanie klucza, które działa specjalnie z jego rozszerzeniem. Przykład rozszerzenia Hello podaje polecenie otwierające wyskakujące okienko.
{
"name": "Hello Extensions",
"description" : "Base Level Extension",
"version": "1.0",
"browser_action": {
"default_popup": "hello.html",
"default_icon": "hello_extensions.png"
},
"manifest_version": 2,
"commands": {
"_execute_browser_action": {
"suggested_key": {
"default": "Ctrl+Shift+F",
"mac": "MacCtrl+Shift+F"
},
"description": "Opens hello.html"
}
}
}
Rozszerzenie definiuje browser_action, więc może określić "execute_browser_action" w
poleceń otwierających plik wyskakującego okienka bez skryptu działającego w tle. Jeśli używasz
page_action, można go zastąpić elementem "execute_page_action". Przeglądarka i rozszerzenie
poleceń można używać w tym samym rozszerzeniu.
Zastąp strony
Rozszerzenie może zastąpić stronę internetową Historia, Nowa karta lub Zakładki niestandardowy plik HTML. Podobnie jak wyskakujące okienko, może zawierać specjalistyczną logikę i styl, ale nie zezwala JavaScript. Jedno rozszerzenie może zastąpić tylko jedną z trzech możliwych stron.
Zarejestruj stronę zastąpienia w pliku manifestu w polu "chrome_url_overrides".
{
"name": "Awesome Override Extension",
...
"chrome_url_overrides" : {
"newtab": "override_page.html"
},
...
}
Podczas zastępowania tych pól pole "newtab" należy zastąpić kodem "bookmarks" lub "history"
.
<html>
<head>
<title>New Tab</title>
</head>
<body>
<h1>Hello World</h1>
<script src="logic.js"></script>
</body>
</html>