Izin "activeTab"
memberikan akses sementara kepada ekstensi ke tab yang sedang aktif saat pengguna memanggil ekstensi, misalnya dengan mengklik tindakannya. Akses ke tab
berlangsung saat 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 tersebut akan terus memiliki akses ke halaman. Jika
pengguna membuka https://chromium.org, akses akan dicabut.
Ini berfungsi sebagai alternatif untuk banyak penggunaan "<all_urls>"
, tetapi tidak menampilkan pesan peringatan
selama penginstalan:
Tanpa "activeTab"
:
Dengan "activeTab"
:
Contoh
Lihat contoh ekstensi 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
}
pekerja layanan:
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
chrome.action.onClicked.addListener((tab) => {
if (!tab.url.includes('chrome://')) {
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
}
});
Motivasi
Pertimbangkan ekstensi kliping web yang memiliki tindakan dan item menu konteks. Ekstensi ini mungkin hanya benar-benar 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 fungsinya jika kebetulan dipanggil oleh pengguna. Ini adalah kekuatan besar untuk dipercayakan
pada ekstensi yang begitu sederhana. Dan jika ekstensi pernah disusupi, penyerang akan
mendapatkan akses ke semua yang dimiliki ekstensi itu.
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. Akses tersebut hanya berlaku hingga
tab dibuka atau ditutup.
Yang diizinkan "activeTab"
Saat izin "activeTab"
diaktifkan untuk tab, ekstensi dapat:
- Panggil
scripting.insertCSS()
atauscripting.executeScript()
pada tab tersebut jika"scripting"
izin juga dinyatakan (seperti dalam contoh di atas). - Dapatkan URL, judul, dan favicon untuk tab tersebut melalui API yang menampilkan objek
tabs.Tab
(pada dasarnya,"activeTab"
memberikan izin host untuk sementara). - Intersep permintaan jaringan di tab ke asal frame utama tab menggunakan webRequest API. Ekstensi sementara waktu mendapatkan izin host untuk asal frame utama tab.
Memanggil activeTab
Gestur pengguna berikut mengaktifkan izin "activeTab"
:
- Menjalankan tindakan
- Mengeksekusi item menu konteks
- Mengeksekusi pintasan keyboard dari commands API
- Menerima saran dari omnibox API