「activeTab」権限

"activeTab" 権限を付与すると、ユーザーが拡張機能を呼び出したとき(アクションをクリックしたときなど)に、拡張機能が現在アクティブなタブに一時的にアクセスできるようになります。タブへのアクセスは、ユーザーがそのページにいる間は継続し、ユーザーがタブから移動するかタブを閉じると取り消されます。たとえば、ユーザーが https://example.com で拡張機能を呼び出し、https://example.com/foo に移動した場合、拡張機能は引き続きページにアクセスできます。ユーザーが https://chromium.org に移動すると、アクセス権は取り消されます。

これは "<all_urls>" の多くの用途の代替として機能しますが、インストール中に警告メッセージは表示されません。

"activeTab" がない場合:

activeTab なし

"activeTab" の場合:

activeTab を使用する場合

chrome:// ページなどの制限付きページへのアクセスは許可されません。

例

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
    });
  }
});

目的

アクションとコンテキスト メニュー項目を含むウェブ クリップ拡張機能を考えてみましょう。この拡張機能は、アクションがクリックされたとき、またはコンテキスト メニュー項目が実行されたときにのみ、タブにアクセスする必要があります。

"activeTab" がないと、この拡張機能は、ユーザーから呼び出された場合にのみ動作するように、すべてのウェブサイトへの完全な永続アクセスをリクエストする必要があります。このような単純な拡張機能に、これほど多くの権限を委ねることになります。拡張機能が侵害された場合、攻撃者は拡張機能がアクセスできるすべてのものにアクセスできます。

一方、"activeTab" 権限を持つ拡張機能は、ユーザーの明示的な操作に応じてのみタブへのアクセス権を取得します。拡張機能が侵害された場合、攻撃者はユーザーが拡張機能を呼び出すまで待ってからアクセスする必要があります。このアクセスは、タブが移動または閉じられるまでのみ有効です。

「activeTab」で許可されること

タブで "activeTab" 権限が有効になっている場合、拡張機能は次のことができます。

  • "scripting" 権限も宣言されている場合は、そのタブで scripting.insertCSS() または scripting.executeScript() を呼び出します(上記の例を参照)。
  • tabs.Tab オブジェクトを返す API を介して、そのタブの URL、タイトル、ファビコンを取得します(基本的に、"activeTab" はホスト権限を一時的に付与します)。
  • webRequest API を使用して、タブ内のネットワーク リクエストをタブのメインフレームのオリジンにインターセプトします。拡張機能は、タブのメインフレームのオリジンに対するホスト権限を一時的に取得します。

activeTab の呼び出し

次のユーザー ジェスチャーにより、"activeTab" 権限が有効になります。