Deskripsi
Gunakan chrome.action
API untuk mengontrol ikon ekstensi di toolbar Google Chrome.
Ketersediaan
Manifes
Untuk menggunakan chrome.action
API, tentukan "manifest_version"
dari 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 masih akan 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 berukuran lebar dan tinggi 16 piksel independen perangkat (DIP).
Kunci "default_icon"
adalah kamus ukuran untuk jalur gambar. Chrome menggunakan ikon ini untuk
memilih skala gambar yang akan digunakan. Jika kecocokan persis tidak ditemukan, Chrome akan memilih yang 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 sediakan beberapa ukuran untuk ikon Anda. Hal ini juga
memastikan ekstensi Anda siap menghadapi potensi perubahan ukuran tampilan ikon. Namun,
jika hanya memberikan ukuran tunggal, kunci "default_icon"
juga dapat ditetapkan ke
string dengan jalur ke ikon tunggal, bukan kamus.
Anda juga dapat memanggil action.setIcon()
untuk menyetel ikon ekstensi secara terprogram dengan menentukan jalur gambar yang berbeda atau memberikan ikon yang dibuat secara dinamis menggunakan elemen kanvas HTML, atau, jika menyetel dari pekerja layanan ekstensi, API kanvas 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}, () => { /* ... */ });
Untuk ekstensi yang dipaketkan (diinstal dari file .crx), gambar dapat berupa sebagian besar format yang dapat ditampilkan oleh mesin rendering Blink, termasuk PNG, JPEG, BMP, ICO, dan lainnya. SVG tidak didukung. Ekstensi yang diekstrak harus menggunakan gambar PNG.
Tooltip (judul)
Tooltip, atau judul, muncul saat pengguna mengarahkan kursor mouse ke ikon ekstensi di toolbar. Nama ini juga disertakan dalam teks yang dapat diakses dan diucapkan oleh pembaca layar saat tombol mendapatkan fokus.
Tooltip default ditetapkan menggunakan kolom "default_title"
dari kunci "action"
di manifest.json
.
Anda juga dapat menetapkannya secara terprogram dengan memanggil action.setTitle()
.
Badge
Tindakan dapat secara opsional menampilkan "badge" — sedikit teks yang ditempatkan di atas ikon. Hal ini memungkinkan Anda memperbarui tindakan untuk menampilkan sejumlah kecil 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 dari 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 akan ditampilkan saat pengguna mengklik tombol tindakan ekstensi di toolbar. Pop-up dapat berisi konten HTML apa pun yang Anda sukai, dan akan otomatis diubah ukurannya agar sesuai dengan kontennya. Ukuran pop-up harus antara 25x25 dan 800x600 piksel.
Pop-up awalnya ditetapkan oleh properti "default_popup"
di kunci "action"
dalam
file manifest.json
. Jika ada, properti ini harus mengarah ke jalur relatif dalam direktori ekstensi. Kolom ini 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 bagi setiap tab, gunakan properti tabId
dalam metode setelan action
API. Misalnya, untuk
menetapkan teks badge untuk tab tertentu, lakukan hal seperti berikut:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
chrome.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
Jika properti tabId
tidak diisi, setelan akan diperlakukan sebagai setelan global. Setelan khusus tab lebih diutamakan daripada setelan global.
Status diaktifkan
Secara default, tindakan toolbar diaktifkan (dapat diklik) di setiap tab. Anda dapat mengontrolnya 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 penggunaan tindakan dalam ekstensi. Untuk mencoba API ini, instal contoh Action API dari repositori chrome-extension-samples.
Menampilkan pop-up
Biasanya, ekstensi menampilkan pop-up saat pengguna mengklik tindakan ekstensi. Untuk
mengimplementasikannya di ekstensi Anda sendiri, deklarasikan pop-up di manifest.json
dan tentukan
konten yang akan ditampilkan Chrome dalam 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>
Memasukkan skrip konten saat diklik
Pola umum untuk ekstensi adalah menampilkan fitur utamanya menggunakan tindakan ekstensi. Contoh berikut menunjukkan pola ini. Saat pengguna mengklik tindakan, ekstensi akan memasukkan skrip konten ke halaman saat ini. Skrip konten kemudian akan menampilkan pemberitahuan 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!');
Mengemulasi 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
number opsional
ID jendela untuk membuka pop-up tindakan. Jika tidak ditentukan, setelan defaultnya adalah jendela yang saat ini aktif.
TabDetails
Properti
-
tabId
number opsional
ID tab yang akan dikueri statusnya. Jika tidak ada tab yang ditentukan, status non-tab-specific akan ditampilkan.
UserSettings
Kumpulan setelan yang ditentukan pengguna yang terkait dengan tindakan ekstensi.
Properti
-
isOnToolbar
boolean
Apakah ikon tindakan ekstensi terlihat di toolbar tingkat atas jendela browser (yaitu, apakah ekstensi telah 'disematkan' oleh pengguna).
UserSettingsChange
Properti
-
isOnToolbar
boolean opsional
Apakah ikon tindakan ekstensi terlihat di toolbar tingkat atas jendela browser (yaitu, apakah ekstensi telah 'disematkan' oleh pengguna).
Metode
disable()
chrome.action.disable(
tabId?: number,
callback?: function,
)
Menonaktifkan tindakan untuk tab.
Parameter
-
tabId
number opsional
ID tab yang tindakannya ingin Anda ubah.
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
enable()
chrome.action.enable(
tabId?: number,
callback?: function,
)
Mengaktifkan tindakan untuk tab. Secara default, tindakan diaktifkan.
Parameter
-
tabId
number opsional
ID tab yang tindakannya ingin Anda ubah.
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
callback?: function,
)
Mendapatkan warna latar belakang tindakan.
Parameter
-
detail
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(result: ColorArray) => void
-
hasil
-
Hasil
-
Promise<browserAction.ColorArray>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
callback?: function,
)
Mendapatkan teks badge tindakan. Jika tidak ada tab yang ditentukan, teks badge yang bukan khusus tab akan ditampilkan. Jika displayActionCountAsBadgeText diaktifkan, teks placeholder akan ditampilkan kecuali jika izin declarativeNetRequestFeedback ada atau teks badge khusus tab diberikan.
Parameter
-
detail
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(result: string) => void
-
hasil
string
-
Hasil
-
Promise<string>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
callback?: function,
)
Mendapatkan warna teks tindakan.
Parameter
-
detail
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(result: ColorArray) => void
-
hasil
-
Hasil
-
Promise<browserAction.ColorArray>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getPopup()
chrome.action.getPopup(
details: TabDetails,
callback?: function,
)
Mendapatkan dokumen html yang ditetapkan sebagai pop-up untuk tindakan ini.
Parameter
-
detail
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(result: string) => void
-
hasil
string
-
Hasil
-
Promise<string>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getTitle()
chrome.action.getTitle(
details: TabDetails,
callback?: function,
)
Mendapatkan judul tindakan.
Parameter
-
detail
-
callback
fungsi opsional
Parameter
callback
terlihat seperti:(result: string) => void
-
hasil
string
-
Hasil
-
Promise<string>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
getUserSettings()
chrome.action.getUserSettings(
callback?: function,
)
Menampilkan setelan buatan pengguna yang terkait dengan tindakan ekstensi.
Parameter
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:(userSettings: UserSettings) => void
-
userSettings
-
Hasil
-
Promise<UserSettings>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
isEnabled()
chrome.action.isEnabled(
tabId?: number,
callback?: function,
)
Menunjukkan apakah tindakan ekstensi diaktifkan untuk tab (atau secara global jika tabId
tidak disediakan). Tindakan yang diaktifkan hanya menggunakan declarativeContent
akan selalu menampilkan salah.
Parameter
-
tabId
number opsional
ID tab yang status diaktifkannya ingin Anda periksa.
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:(isEnabled: boolean) => void
-
isEnabled
boolean
True jika tindakan ekstensi diaktifkan.
-
Hasil
-
Promise<boolean>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
callback?: function,
)
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.
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
callback?: function,
)
Menetapkan warna latar belakang untuk badge.
Parameter
-
detail
objek
-
warna
string | ColorArray
Array dari 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 adalah#FF0000
atau#F00
. -
tabId
number opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setBadgeText()
chrome.action.setBadgeText(
details: object,
callback?: function,
)
Menetapkan teks badge untuk tindakan. Badge ditampilkan di bagian atas ikon.
Parameter
-
detail
objek
-
tabId
number opsional
Membatasi perubahan ke saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
teks
string opsional
Jumlah karakter apa pun dapat diteruskan, tetapi hanya sekitar empat karakter yang dapat muat dalam ruang. Jika string kosong (
''
) diteruskan, teks badge akan dihapus. JikatabId
ditentukan dantext
bernilai null, teks untuk tab yang ditentukan akan dihapus dan defaultnya adalah teks badge global.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
callback?: function,
)
Menetapkan warna teks untuk badge.
Parameter
-
detail
objek
-
warna
string | ColorArray
Array dari 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 adalah#FF0000
atau#F00
. Jika nilai ini tidak ditetapkan, warna akan otomatis dipilih dan 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
number opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setIcon()
chrome.action.setIcon(
details: object,
callback?: function,
)
Menetapkan ikon untuk tindakan. Ikon dapat ditentukan baik sebagai jalur ke file gambar atau sebagai data piksel dari elemen kanvas, atau sebagai kamus dari salah satu ikon tersebut. Properti path atau imageData harus ditentukan.
Parameter
-
detail
objek
-
imageData
ImageData | objek opsional
Objek ImageData atau kamus {size -> ImageData} yang mewakili ikon untuk disetel. 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
, 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 | objek opsional
Jalur gambar relatif atau kamus {size ->relative image path} yang mengarah ke ikon yang akan disetel. Jika ikon ditetapkan sebagai kamus, gambar sebenarnya yang akan digunakan akan dipilih bergantung pada kepadatan piksel layar. Jika jumlah piksel gambar yang sesuai dengan satu unit ruang layar sama dengan
scale
, gambar dengan ukuranscale
* n akan dipilih, dengan n adalah ukuran ikon di UI. Setidaknya satu gambar harus ditentukan. Perhatikan bahwa 'details.path = foo' sama dengan 'details.path = {'16': foo}' -
tabId
number opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Janji<void>
Chrome 96 dan yang lebih baruPromise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setPopup()
chrome.action.setPopup(
details: object,
callback?: function,
)
Menetapkan dokumen HTML untuk 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
number opsional
Membatasi perubahan saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama yang diteruskan ke callback.
setTitle()
chrome.action.setTitle(
details: object,
callback?: function,
)
Menetapkan judul tindakan. Kolom ini akan muncul di tooltip.
Parameter
-
detail
objek
-
tabId
number opsional
Membatasi perubahan ke saat tab tertentu dipilih. Otomatis direset saat tab ditutup.
-
judul
string
String yang akan ditampilkan tindakan saat kursor diarahkan.
-
-
callback
fungsi opsional
Parameter
callback
terlihat seperti ini:() => void
Hasil
-
Promise<void>
Promise didukung di Manifes V3 dan yang lebih baru, tetapi callback disediakan untuk kompatibilitas mundur. Anda tidak dapat menggunakan keduanya pada panggilan fungsi yang sama. Promise di-resolve dengan jenis yang sama dengan yang diteruskan ke callback.
Acara
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
Diaktifkan jika ikon tindakan diklik. Peristiwa ini tidak akan diaktifkan jika tindakan memiliki pop-up.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti ini:(tab: tabs.Tab) => void
-
tab
-
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
Diaktifkan saat setelan yang ditentukan pengguna yang terkait dengan perubahan tindakan ekstensi.
Parameter
-
callback
fungsi
Parameter
callback
terlihat seperti:(change: UserSettingsChange) => void
-
ubah
-