Izin "activeTab" memberi ekstensi akses sementara ke tab yang saat ini aktif saat
pengguna memanggil ekstensi - misalnya dengan mengklik tindakan-nya. Akses ke tab
berlangsung selama pengguna berada di halaman tersebut, dan dicabut saat pengguna keluar atau menutup tab.
Misalnya, jika pengguna memanggil ekstensi di https://example.com, lalu
membuka https://example.com/foo, ekstensi akan terus memiliki akses ke halaman tersebut. Jika
pengguna membuka https://chromium.org, akses akan dicabut.
Opsi ini berfungsi sebagai alternatif untuk banyak penggunaan "<all_urls>", tetapi tidak menampilkan pesan peringatan
selama penginstalan:
Tanpa "activeTab":

Dengan "activeTab":

Akses tidak diberikan ke halaman yang dibatasi, seperti halaman chrome://.
Contoh
Lihat ekstensi contoh Page Redder:
manifest.json:
{
"name": "Page Redder",
"version": "2.0",
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "service-worker.js"
},
"action": {
"default_title": "Make this page red"
},
"manifest_version": 3
}
service-worker:
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
browser.action.onClicked.addListener((tab) => {
// If the tab URL is not set, it is a restricted page.
if (tab.url) {
browser.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
}
});
Motivasi
Pertimbangkan ekstensi kliping web yang memiliki tindakan dan item menu konteks. Ekstensi ini mungkin hanya perlu mengakses tab saat tindakannya diklik, atau saat item menu konteksnya dijalankan.
Tanpa "activeTab", ekstensi ini perlu meminta akses penuh dan persisten ke setiap situs,
hanya agar dapat melakukan tugasnya jika dipanggil oleh pengguna. Ini adalah kemampuan yang sangat besar untuk dipercayakan kepada ekstensi yang begitu sederhana. Dan jika ekstensi pernah disusupi, penyerang
akan mendapatkan akses ke semua yang dimiliki ekstensi.
Sebaliknya, ekstensi dengan izin "activeTab" hanya mendapatkan akses ke tab sebagai respons
terhadap gestur pengguna yang eksplisit. Jika ekstensi disusupi, penyerang harus menunggu
pengguna memanggil ekstensi sebelum mendapatkan akses. Dan akses tersebut hanya berlangsung hingga tab
ditutup atau dibuka.
Hal yang diizinkan oleh "activeTab"
Jika izin "activeTab" diaktifkan untuk tab, ekstensi dapat:
- Panggil
scripting.insertCSS()atauscripting.executeScript()di tab tersebut jika izin"scripting"juga dideklarasikan (seperti dalam contoh di atas). - Mendapatkan URL, judul, dan favicon untuk tab tersebut melalui API yang menampilkan objek
tabs.Tab(pada dasarnya,"activeTab"memberikan izin host untuk sementara). - Mengintersepsi permintaan jaringan di tab ke origin frame utama tab menggunakan API webRequest. Ekstensi mendapatkan izin host untuk origin frame utama tab untuk sementara.
Memanggil activeTab
Gestur pengguna berikut mengaktifkan izin "activeTab":
- Menjalankan tindakan
- Menjalankan item menu konteks
- Menjalankan pintasan keyboard dari commands API
- Menerima saran dari omnibox API