chrome.commands

更新日: 2026-09-25 robots: noindex

説明

commands API を使用して、拡張機能でアクションをトリガーするキーボード ショートカットを追加します。たとえば、ブラウザ アクションを開くアクションや、拡張機能にコマンドを送信するアクションなどです。

マニフェスト

この API を使用するには、次のキーをマニフェストで宣言する必要があります。

"commands"

用途

Commands API を使用すると、拡張機能のデベロッパーは特定のコマンドを定義し、デフォルトのキーの組み合わせにバインドできます。拡張機能が受け入れる各コマンドは、拡張機能のマニフェストで "commands" オブジェクトのプロパティとして宣言する必要があります。

プロパティキーはコマンドの名前として使用されます。コマンド オブジェクトは 2 つのプロパティを取ることができます。

suggested_key

コマンドのデフォルトのキーボード ショートカットを宣言するオプションのプロパティ。省略すると、コマンドはバインドされません。このプロパティには、文字列値またはオブジェクト値を指定できます。

  • 文字列値は、すべてのプラットフォームで使用されるデフォルトのキーボード ショートカットを指定します。

  • オブジェクト値を使用すると、拡張機能のデベロッパーはプラットフォームごとにキーボード ショートカットをカスタマイズできます。プラットフォーム固有のショートカットを指定する場合、有効なオブジェクト プロパティは default、chromeos、linux、mac、windows です。

詳しくは、キーの組み合わせの要件をご覧ください。

description

コマンドの目的を簡単に説明する文字列。この文字列は、拡張機能のキーボード ショートカット管理 UI に表示されます。説明は標準コマンドには必須ですが、アクション コマンドでは無視されます。

拡張機能には多くのコマンドを設定できますが、推奨されるキーボード ショートカットは最大 4 つまで指定できます。ユーザーは、chrome://extensions/shortcuts ダイアログから手動でショートカットを追加できます。

サポートされているキー

次のキーは、コマンド ショートカットとして使用できます。キーの定義では大文字と小文字が区別されます。キーの大文字と小文字が間違っている拡張機能を読み込もうとすると、インストール時にマニフェスト解析エラーが発生します。

アルファキー
A … Z
数値キー
0 … 9
標準のキーストリング

一般 - Comma、Period、Home、End、PageUp、PageDown、Space、Insert、Delete

矢印キー - Up、Down、Left、Right

メディアMediaNextTrackMediaPlayPauseMediaPrevTrackMediaStop

修飾キーの文字列

Ctrl、Alt(macOS の場合は Option)、Shift、MacCtrl(macOS のみ)、Command(macOS のみ)、Search(ChromeOS のみ)

キーの組み合わせの要件

  • 拡張機能のコマンド ショートカットには、Ctrl または Alt を含める必要があります。

    • 修飾キーをメディアキーと組み合わせて使用することはできません。
  • macOS では、Ctrl は自動的に Command に変換されます。

    • macOS で Control キーを使用するには、"mac" ショートカットを定義するときに Ctrl を MacCtrl に置き換えます。

    • 別のプラットフォームの組み合わせで MacCtrl を使用すると、検証エラーが発生し、拡張機能がインストールされません。

  • Shift は、すべてのプラットフォームで省略可能な修飾子です。

  • Search は、ChromeOS 専用のオプションの修飾子です。

  • 特定のオペレーティング システムと Chrome のショートカット(ウィンドウ管理など)は、常に拡張機能コマンドのショートカットよりも優先され、上書きすることはできません。

コマンド イベントの処理

manifest.json:

{
  "name": "My extension",
  ...
  "commands": {
    "run-foo": {
      "suggested_key": {
        "default": "Ctrl+Shift+Y",
        "mac": "Command+Shift+Y"
      },
      "description": "Run \"foo\" on the current page."
    },
    "_execute_action": {
      "suggested_key": {
        "windows": "Ctrl+Shift+Y",
        "mac": "Command+Shift+Y",
        "chromeos": "Ctrl+Shift+U",
        "linux": "Ctrl+Shift+J"
      }
    }
  },
  ...
}

サービス ワーカーでは、onCommand.addListener を使用して、マニフェストで定義された各コマンドにハンドラをバインドできます。次に例を示します。

service-worker.js:

chrome.commands.onCommand.addListener((command) => {
  console.log(`Command: ${command}`);
});

アクション コマンド

_execute_action(Manifest V3)、_execute_browser_action(Manifest V2)、_execute_page_action(Manifest V2)の各コマンドは、それぞれアクション、ブラウザ アクション、ページ アクションをトリガーするアクション用に予約されています。これらのコマンドは、標準コマンドのように command.onCommand イベントをディスパッチしません。

ポップアップの表示に基づいてアクションを実行する必要がある場合は、ポップアップの JavaScript 内で DOMContentLoaded イベントをリッスンすることを検討してください。

スコープ

デフォルトでは、コマンドのスコープは Chrome ブラウザに設定されています。つまり、ブラウザにフォーカスがない場合、コマンド ショートカットは無効になります。Chrome 35 以降、拡張機能のデベロッパーは、必要に応じてコマンドを「グローバル」としてマークできるようになりました。グローバル コマンドは、Chrome がフォーカスされていない場合でも機能します。

グローバル コマンドのキーボード ショートカットの候補は Ctrl+Shift+[0..9] に制限されています。これは、他のアプリケーションのショートカットをオーバーライドするリスクを最小限に抑えるための保護措置です。たとえば、Alt+P をグローバルとして許可すると、印刷ダイアログを開くキーボード ショートカットが他のアプリケーションで機能しなくなる可能性があります。

エンドユーザーは、chrome://extensions/shortcuts で公開されている UI を使用して、グローバル コマンドを任意のキーの組み合わせに再マッピングできます。

例:

manifest.json:

{
  "name": "My extension",
  ...
  "commands": {
    "toggle-feature-foo": {
      "suggested_key": {
        "default": "Ctrl+Shift+5"
      },
      "description": "Toggle feature foo",
      "global": true
    }
  },
  ...
}

例

次の例では、Commands API のコア機能を使用しています。

基本的なコマンド

コマンドを使用すると、拡張機能はユーザーが呼び出せるキーボード ショートカットにロジックをマッピングできます。最も基本的なコマンドでは、次の例に示すように、拡張機能のマニフェストでのコマンド宣言とリスナーの登録のみが必要です。

manifest.json:

{
  "name": "Command demo - basic",
  "version": "1.0",
  "manifest_version": 3,
  "background": {
    "service_worker": "service-worker.js"
  },
  "commands": {
    "inject-script": {
      "suggested_key": "Ctrl+Shift+Y",
      "description": "Inject a script on the page"
    }
  }
}

service-worker.js:

chrome.commands.onCommand.addListener((command) => {
  console.log(`Command "${command}" triggered`);
});

アクション コマンド

使用方法のセクションで説明したように、コマンドを拡張機能のアクションにマッピングすることもできます。次の例では、ユーザーが拡張機能のアクションをクリックするか、キーボード ショートカットをトリガーしたときに、現在のページにアラートを表示するコンテンツ スクリプトを挿入します。

manifest.json:

{
  "name": "Commands demo - action invocation",
  "version": "1.0",
  "manifest_version": 3,
  "background": {
    "service_worker": "service-worker.js"
  },
  "permissions": ["activeTab", "scripting"],
  "action": {},
  "commands": {
    "_execute_action": {
      "suggested_key": {
        "default": "Ctrl+U",
        "mac": "Command+U"
      }
    }
  }
}

service-worker.js:

chrome.action.onClicked.addListener((tab) => {
  chrome.scripting.executeScript({
    target: {tabId: tab.id},
    func: contentScriptFunc,
    args: ['action'],
  });
});

function contentScriptFunc(name) {
  alert(`"${name}" executed`);
}

// This callback WILL NOT be called for "_execute_action"
chrome.commands.onCommand.addListener((command) => {
  console.log(`Command "${command}" called`);
});

登録されたコマンドを確認する

拡張機能が、別の拡張機能ですでに使用されているショートカットを登録しようとすると、2 番目の拡張機能のショートカットは想定どおりに登録されません。この可能性を予測し、インストール時に競合をチェックすることで、より堅牢なエンドユーザー エクスペリエンスを提供できます。

service-worker.js:

chrome.runtime.onInstalled.addListener((reason) => {
  if (reason === chrome.runtime.OnInstalledReason.INSTALL) {
    checkCommandShortcuts();
  }
});

// Only use this function during the initial install phase. After
// installation the user may have intentionally unassigned commands.
function checkCommandShortcuts() {
  chrome.commands.getAll((commands) => {
    let missingShortcuts = [];

    for (let {name, shortcut} of commands) {
      if (shortcut === '') {
        missingShortcuts.push(name);
      }
    }

    if (missingShortcuts.length > 0) {
      // Update the extension UI to inform the user that one or more
      // commands are currently unassigned.
    }
  });
}

型

Command

プロパティ

  • 説明

    文字列 省略可

    拡張機能コマンドの説明

  • name

    文字列 省略可

    拡張機能コマンドの名前

  • ショートカット

    文字列 省略可

    このコマンドで有効なショートカット。有効でない場合は空白。

メソッド

getAll()

Promise
chrome.commands.getAll(
  callback?: function,
)
: Promise<Command[]>

この拡張機能に登録されているすべての拡張機能コマンドと、そのショートカット(有効な場合)を返します。Chrome 110 より前では、このコマンドは _execute_action を返しませんでした。

パラメータ

  • callback

    function 省略可

    callback パラメータは次のようになります。

    (commands: Command[]) => void

戻り値

  • Promise<Command[]>

    Chrome 96 以降

    登録済みのコマンドのリストを返します。

    Promise は Manifest V3 以降でのみサポートされています。他のプラットフォームではコールバックを使用する必要があります。

イベント

onCommand

chrome.commands.onCommand.addListener(
  callback: function,
)

キーボード ショートカットを使用して登録済みのコマンドが有効になったときに呼び出されます。

パラメータ

  • callback

    関数

    callback パラメータは次のようになります。

    (command: string, tab?: tabs.Tab) => void

    • コマンド

      文字列

    • タブ

      tabs.Tab 省略可