Izin "activeTab"
memberi ekstensi akses sementara ke tab yang sedang aktif jika
pengguna memanggil ekstensi - misalnya dengan mengklik tindakannya. 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
menavigasi ke https://example.com/foo, ekstensi akan terus memiliki akses ke halaman. Jika
pengguna membuka https://chromium.org, akses dicabut.
Tindakan ini berfungsi sebagai alternatif untuk banyak penggunaan "<all_urls>"
, tetapi menampilkan tidak ada pesan peringatan
selama penginstalan:
Tanpa "activeTab"
:
Dengan "activeTab"
:
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
}
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. Ini ekstensi mungkin hanya benar-benar perlu mengakses tab ketika tindakannya diklik, atau ketika dijalankan.
Tanpa "activeTab"
, ekstensi ini harus meminta akses penuh dan persisten ke setiap situs,
hanya agar ia bisa melakukan pekerjaannya
jika kebetulan dipanggil oleh pengguna. Ini merupakan banyak
kekuasaan untuk memercayakan
perluasan sederhana seperti itu. Dan jika ekstensi pernah disusupi, penyerang
mendapatkan akses ke semua
hal yang dimiliki ekstensi.
Sebaliknya, ekstensi dengan izin "activeTab"
hanya mendapatkan akses ke tab sebagai respons
hingga ke {i>gesture <i}eksplisit. Jika ekstensi disusupi, penyerang harus menunggu
memanggil ekstensi sebelum mendapatkan akses. Dan akses itu hanya
berlangsung sampai tab
dinavigasi atau ditutup.
Apa itu "activeTab" mengizinkan
Saat izin "activeTab"
diaktifkan untuk sebuah tab, ekstensi dapat:
- Panggil
scripting.insertCSS()
atauscripting.executeScript()
pada tab tersebut jika izin"scripting"
juga dinyatakan (seperti pada 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). - Mencegah permintaan jaringan di tab ke asal frame utama tab menggunakan webRequest Compute Engine API. Ekstensi untuk sementara 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 API perintah
- Menerima saran dari API omnibox