Izin "activeTab"

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":

Tanpa activeTab

Dengan "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() atau scripting.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":