"activeTab"
権限は、ユーザーが拡張機能を呼び出すときに(アクションをクリックするなど)、現在アクティブなタブに対する一時的なアクセス権を拡張機能に付与します。タブへのアクセス権は、ユーザーがそのページにアクセスしている間は持続し、ユーザーが別のページに移動するかタブを閉じると取り消されます。たとえば、ユーザーが https://example.com で拡張機能を呼び出した後に https://example.com/foo に移動した場合、拡張機能は引き続きそのページにアクセスできます。ユーザーが https://chromium.org にアクセスすると、アクセスが取り消されます。
これは "<all_urls>"
の多くの使用場面で代替手段として使用できますが、インストール中に警告メッセージは表示されません。
"activeTab"
を使用しない場合:
"activeTab"
の場合:
例
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 (!tab.url.includes('chrome://')) {
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"
権限を有効にします。
- アクションの実行
- コンテキスト メニュー項目を実行する
- コマンド API からキーボード ショートカットを実行する
- omnibox API からの候補を受け入れる