Izin "activeTab"

Izin "activeTab" memberi ekstensi akses sementara ke tab yang sedang 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":

Tanpa activeTab

Dengan "activeTab":

Dengan activeTab

Akses tidak diberikan ke halaman yang dibatasi, seperti halaman chrome://.

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
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

chrome.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    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 perlu mengakses tab saat tindakannya diklik, atau saat item menu konteksnya dijalankan.

Tanpa "activeTab", ekstensi ini harus meminta akses penuh dan persisten ke setiap situs, hanya agar dapat melakukan tugasnya jika dipanggil oleh pengguna. Ada banyak kemampuan yang dipercayakan pada ekstensi sederhana ini. Dan jika ekstensi tersebut disusupi, penyerang akan mendapatkan akses ke semua yang dimiliki ekstensi tersebut.

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 berlangsung hingga tab dibuka atau ditutup.

Hal yang diizinkan oleh "activeTab"

Saat izin "activeTab" diaktifkan untuk tab, ekstensi dapat:

  • Panggil scripting.insertCSS() atau scripting.executeScript() di tab tersebut jika izin "scripting" juga dideklarasikan (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).
  • Menyadap permintaan jaringan di tab ke origin frame utama tab menggunakan webRequest API. Ekstensi akan mendapatkan izin host sementara untuk origin frame utama tab.

Memanggil activeTab

Gestur pengguna berikut mengaktifkan izin "activeTab":