「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';
}

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

目的

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

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

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

activeTab の機能

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

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

activeTab の呼び出し

次のユーザー操作により、"activeTab" 権限が有効になります。