Deskripsi
Gunakan chrome.action
API untuk mengontrol ikon ekstensi di toolbar Google Chrome.
Ketersediaan
Manifes
Untuk menggunakan chrome.action
API, tentukan "manifest_version"
3
dan sertakan kunci "action"
dalam file manifes Anda.
{ "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 }, ... }
Kunci "action"
(beserta turunannya) bersifat opsional. Jika tidak disertakan, ekstensi Anda tetap ditampilkan di toolbar untuk memberikan akses ke menu ekstensi. Oleh karena itu, sebaiknya Anda selalu menyertakan setidaknya kunci "action"
dan "default_icon"
.
Konsep dan penggunaan
Bagian-bagian UI
Ikon
Ikon adalah gambar utama di toolbar untuk ekstensi Anda, dan ditetapkan oleh kunci "default_icon"
di kunci "action"
manifes Anda. Ikon harus memiliki lebar dan tinggi 16 piksel independen perangkat (DIP).
Kunci "default_icon"
adalah kamus ukuran ke jalur gambar. Chrome menggunakan ikon ini untuk memilih skala gambar yang akan digunakan. Jika kecocokan persis tidak ditemukan, Chrome akan memilih kecocokan terdekat yang tersedia dan menskalakannya agar sesuai dengan gambar, yang dapat memengaruhi kualitas gambar.
Karena perangkat dengan faktor skala yang kurang umum seperti 1,5x atau 1,2x menjadi lebih umum, sebaiknya Anda menyediakan beberapa ukuran untuk ikon Anda. Hal ini juga akan membuat ekstensi Anda siap menghadapi perubahan ukuran tampilan ikon di masa mendatang. Namun, jika hanya memberikan satu ukuran, kunci "default_icon"
juga dapat ditetapkan ke string dengan jalur ke satu ikon, bukan kamus.
Anda juga dapat memanggil action.setIcon()
untuk menyetel ikon ekstensi Anda secara terprogram dengan menentukan jalur gambar yang berbeda atau memberikan ikon yang dibuat secara dinamis menggunakan elemen canvas HTML, atau, jika menyetel dari pekerja layanan ekstensi, API canvas di luar layar.
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}, () => { /* ... */ });
Untuk ekstensi yang dikemas (diinstal dari file .crx), gambar dapat menggunakan sebagian besar format yang dapat ditampilkan oleh mesin rendering Blink, termasuk PNG, JPEG, BMP, ICO, dan lainnya. SVG tidak didukung. Ekstensi yang belum di-unzip harus menggunakan gambar PNG.
Tooltip (judul)
Tooltip, atau judul, akan muncul saat pengguna menahan kursor mouse di atas ikon ekstensi di toolbar. Teks ini juga disertakan dalam teks yang dapat diakses yang diucapkan oleh pembaca layar saat tombol mendapatkan fokus.
Tooltip default ditetapkan menggunakan kolom "default_title"
dari kunci "action"
di manifest.json
. Anda juga dapat menyetelnya secara terprogram dengan memanggil action.setTitle()
.
Badge
Tindakan dapat menampilkan "badge" secara opsional — sedikit teks yang disusun di atas ikon. Hal ini memungkinkan Anda memperbarui tindakan untuk menampilkan sedikit informasi tentang status ekstensi, seperti penghitung. Badge memiliki komponen teks dan warna latar belakang. Karena ruang terbatas, sebaiknya teks badge menggunakan empat karakter atau kurang.
Untuk membuat badge, tetapkan secara terprogram dengan memanggil action.setBadgeBackgroundColor()
dan action.setBadgeText()
. Tidak ada setelan badge default dalam manifes. Nilai warna badge dapat berupa array empat bilangan bulat antara 0 dan 255 yang membentuk warna RGBA badge atau string dengan nilai warna 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 () => { /* ... */ }, );
Pop-up
Pop-up tindakan ditampilkan saat pengguna mengklik tombol tindakan ekstensi di toolbar. Pop-up dapat berisi konten HTML apa pun yang Anda inginkan, dan ukurannya akan otomatis disesuaikan agar sesuai dengan kontennya. Ukuran pop-up harus antara 25x25 dan 800x600 piksel.
Pop-up awalnya ditetapkan oleh properti "default_popup"
dalam kunci "action"
di file manifest.json
. Jika ada, properti ini harus mengarah ke jalur relatif dalam direktori ekstensi. Juga dapat diperbarui secara dinamis untuk mengarah ke jalur relatif yang berbeda menggunakan metode action.setPopup()
.
Kasus penggunaan
Status per tab
Tindakan ekstensi dapat memiliki status yang berbeda untuk setiap tab. Untuk menetapkan nilai untuk setiap tab, gunakan properti tabId
di metode setelan action
API. Misalnya, untuk menetapkan teks badge untuk tab tertentu, lakukan sesuatu seperti berikut:
function getTabId() { /* ... */} function getTabBadge() { /* ... */} chrome.action.setBadgeText( { text: getTabBadge(tabId), tabId: getTabId(), }, () => { ... } );
Jika properti tabId
tidak disertakan, setelan akan diperlakukan sebagai setelan global. Setelan khusus tab lebih diprioritaskan daripada setelan global.
Status diaktifkan
Secara default, tindakan toolbar diaktifkan (dapat diklik) di setiap tab. Anda dapat mengubah default ini dengan menetapkan properti default_state
di kunci action
manifes. Jika default_state
disetel ke "disabled"
, tindakan akan dinonaktifkan secara default dan harus diaktifkan secara terprogram agar dapat diklik. Jika default_state
ditetapkan ke "enabled"
(default), tindakan diaktifkan dan dapat diklik secara default.
Anda dapat mengontrol status secara terprogram menggunakan metode action.enable()
dan action.disable()
. Hal ini hanya memengaruhi apakah pop-up (jika ada) atau peristiwa action.onClicked
dikirim ke ekstensi Anda; hal ini tidak memengaruhi keberadaan tindakan di toolbar.
Contoh
Contoh berikut menunjukkan beberapa cara umum tindakan digunakan dalam ekstensi. Untuk mencoba API ini, instal contoh Action API dari repositori chrome-extension-samples.
Menampilkan pop-up
Ekstensi biasanya menampilkan pop-up saat pengguna mengklik tindakan ekstensi. Untuk menerapkan ini di ekstensi Anda sendiri, deklarasikan pop-up di manifest.json
dan tentukan konten yang harus ditampilkan Chrome di pop-up.
// 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>
Menyisipkan skrip konten saat diklik
Pola umum untuk ekstensi adalah mengekspos fitur utamanya menggunakan tindakan ekstensi. Contoh berikut menunjukkan pola ini. Saat pengguna mengklik tindakan, ekstensi menyuntikkan skrip konten ke halaman saat ini. Kemudian, skrip konten menampilkan dialog notifikasi untuk memverifikasi bahwa semuanya berfungsi seperti yang diharapkan.
// 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!');
Meniru tindakan dengan declarativeContent
Contoh ini menunjukkan cara logika latar belakang ekstensi dapat (a) menonaktifkan tindakan secara default dan (b) menggunakan declarativeContent untuk mengaktifkan tindakan di situs tertentu.
// 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); }); });
Jenis
OpenPopupOptions
Properti
- windowId
nomor opsional
ID jendela untuk membuka pop-up tindakan. Jika tidak ditentukan, defaultnya adalah jendela yang sedang aktif.
TabDetails
Properti
- tabId
nomor opsional
ID tab untuk kueri status. Jika tidak ada tab yang ditentukan, status non-tab tertentu akan ditampilkan.
UserSettings
Kumpulan setelan yang ditentukan pengguna yang terkait dengan tindakan ekstensi.
Properti
- isOnToolbar
boolean
Apakah ikon tindakan ekstensi terlihat di toolbar tingkat teratas jendela browser (yaitu, apakah ekstensi telah 'disematkan' oleh pengguna).
UserSettingsChange
Properti
- isOnToolbar
boolean opsional
Apakah ikon tindakan ekstensi terlihat di toolbar tingkat teratas jendela browser (yaitu, apakah ekstensi telah 'disematkan' oleh pengguna).
Metode
disable()
chrome.action.disable(
tabId?: number,
): Promise<void>
Menonaktifkan tindakan untuk tab.
Parameter
- tabId
nomor opsional
ID tab yang tindakannya ingin Anda ubah.
Hasil
-
Promise<void>
enable()
chrome.action.enable(
tabId?: number,
): Promise<void>
Mengaktifkan tindakan untuk tab. Secara default, tindakan diaktifkan.
Parameter
- tabId
nomor opsional
ID tab yang tindakannya ingin Anda ubah.
Hasil
-
Promise<void>
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Mendapatkan warna latar belakang tindakan.
Parameter
- detail
Hasil
-
Promise<extensionTypes.ColorArray>
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
): Promise<string>
Mendapatkan teks badge tindakan. Jika tidak ada tab yang ditentukan, teks badge yang tidak spesifik per tab akan ditampilkan. Jika displayActionCountAsBadgeText diaktifkan, teks placeholder akan ditampilkan kecuali jika izin declarativeNetRequestFeedback ada atau teks badge khusus tab diberikan.
Parameter
- detail
Hasil
-
Promise<string>
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Mendapatkan warna teks tindakan.
Parameter
- detail
Hasil
-
Promise<extensionTypes.ColorArray>
getPopup()
chrome.action.getPopup(
details: TabDetails,
): Promise<string>
Mendapatkan dokumen HTML yang ditetapkan sebagai pop-up untuk tindakan ini.
Parameter
- detail
Hasil
-
Promise<string>
getTitle()
chrome.action.getTitle(
details: TabDetails,
): Promise<string>
Mendapatkan judul tindakan.
Parameter
- detail
Hasil
-
Promise<string>
getUserSettings()
chrome.action.getUserSettings(): Promise<UserSettings>
Menampilkan setelan yang ditentukan pengguna terkait tindakan ekstensi.
Hasil
-
Promise<UserSettings>
isEnabled()
chrome.action.isEnabled(
tabId?: number,
): Promise<boolean>
Menunjukkan apakah tindakan ekstensi diaktifkan untuk tab (atau secara global jika tidak ada tabId
yang diberikan). Tindakan yang diaktifkan hanya menggunakan declarativeContent
selalu menampilkan nilai salah (false).
Parameter
- tabId
nomor opsional
ID tab yang ingin Anda periksa status aktifnya.
Hasil
-
Promise<boolean>
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Membuka pop-up ekstensi. Antara Chrome 118 dan Chrome 126, fitur ini hanya tersedia untuk ekstensi yang diinstal oleh kebijakan.
Parameter
- opsi
OpenPopupOptions opsional
Menentukan opsi untuk membuka pop-up.
Hasil
-
Promise<void>
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
): Promise<void>
Menetapkan warna latar belakang untuk badge.
Parameter
- detail
objek
- warna
string | ColorArray
Array empat bilangan bulat dalam rentang [0,255] yang membentuk warna RGBA badge. Misalnya, merah buram adalah
[255, 0, 0, 255]
. Dapat juga berupa string dengan nilai CSS, dengan merah buram menjadi#FF0000
atau#F00
. - tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
Hasil
-
Promise<void>
setBadgeText()
chrome.action.setBadgeText(
details: object,
): Promise<void>
Menetapkan teks badge untuk tindakan. Badge ditampilkan di atas ikon.
Parameter
- detail
objek
- tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
- teks
string opsional
Sejumlah karakter dapat diteruskan, tetapi hanya sekitar empat karakter yang dapat muat di ruang. Jika string kosong (
''
) diteruskan, teks badge akan dihapus. JikatabId
ditentukan dantext
adalah null, teks untuk tab yang ditentukan akan dihapus dan default ke teks badge global.
-
Hasil
-
Promise<void>
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
): Promise<void>
Menetapkan warna teks untuk badge.
Parameter
- detail
objek
- warna
string | ColorArray
Array empat bilangan bulat dalam rentang [0,255] yang membentuk warna RGBA badge. Misalnya, merah buram adalah
[255, 0, 0, 255]
. Dapat juga berupa string dengan nilai CSS, dengan merah buram menjadi#FF0000
atau#F00
. Jika nilai ini tidak ditetapkan, warna akan dipilih secara otomatis yang akan kontras dengan warna latar belakang badge sehingga teks akan terlihat. Warna dengan nilai alfa yang setara dengan 0 tidak akan ditetapkan dan akan menampilkan error. - tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
Hasil
-
Promise<void>
setIcon()
chrome.action.setIcon(
details: object,
): Promise<void>
Menetapkan ikon untuk tindakan. Ikon dapat ditentukan sebagai jalur ke file gambar atau sebagai data piksel dari elemen kanvas, atau sebagai kamus salah satunya. Properti path atau imageData harus ditentukan.
Parameter
- detail
objek
- imageData
ImageData | object opsional
Objek ImageData atau kamus {size -> ImageData} yang merepresentasikan ikon yang akan ditetapkan. Jika ikon ditentukan sebagai kamus, gambar sebenarnya yang akan digunakan dipilih bergantung pada kepadatan piksel layar. Jika jumlah piksel gambar yang sesuai dengan satu unit ruang layar sama dengan
scale
, maka gambar dengan ukuranscale
* n akan dipilih, dengan n adalah ukuran ikon di UI. Minimal satu gambar harus ditentukan. Perhatikan bahwa 'details.imageData = foo' setara dengan 'details.imageData = {'16': foo}' - jalur
string | object opsional
Jalur gambar relatif atau kamus {ukuran -> jalur gambar relatif} yang mengarah ke ikon yang akan ditetapkan. Jika ikon ditentukan sebagai kamus, gambar sebenarnya yang akan digunakan dipilih bergantung pada kepadatan piksel layar. Jika jumlah piksel gambar yang sesuai dengan satu unit ruang layar sama dengan
scale
, maka gambar dengan ukuranscale
* n akan dipilih, dengan n adalah ukuran ikon di UI. Minimal satu gambar harus ditentukan. Perhatikan bahwa 'details.path = foo' setara dengan 'details.path = {'16': foo}' - tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
Hasil
-
Promise<void>
Chrome 96+
setPopup()
chrome.action.setPopup(
details: object,
): Promise<void>
Menetapkan dokumen HTML yang akan dibuka sebagai pop-up saat pengguna mengklik ikon tindakan.
Parameter
- detail
objek
- pop-up
string
Jalur relatif ke file HTML yang akan ditampilkan di pop-up. Jika disetel ke string kosong (
''
), tidak ada pop-up yang ditampilkan. - tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
Hasil
-
Promise<void>
setTitle()
chrome.action.setTitle(
details: object,
): Promise<void>
Menetapkan judul tindakan. Hal ini akan muncul di tooltip.
Parameter
- detail
objek
- tabId
nomor opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
- judul
string
String yang harus ditampilkan tindakan saat kursor diarahkan ke atasnya.
-
Hasil
-
Promise<void>
Acara
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
Diaktifkan saat ikon tindakan diklik. Peristiwa ini tidak akan dipicu jika tindakan memiliki pop-up.
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
Diaktifkan saat setelan yang ditentukan pengguna terkait perubahan tindakan ekstensi.
Parameter
- callback
fungsi
Parameter
callback
terlihat seperti:(change: UserSettingsChange) => void
- ubah
-