chrome.commands

説明

Command API を使用すると、拡張機能での操作(ブラウザの操作を開く操作や拡張機能にコマンドを送信する操作など)をトリガーするキーボード ショートカットを追加できます。

マニフェスト

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

"commands"

コンセプトと使用方法

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

プロパティキーがコマンド名として使用されます。コマンド オブジェクトには 2 つのプロパティがあります。

suggested_key

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

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

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

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

description

ユーザーにコマンドの簡単な説明を提供するために使用される文字列。この文字列は、拡張機能のキーボード ショートカットの管理 UI に表示されます。説明は、標準コマンドでは必要ですが、アクション コマンドでは無視されます。

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

サポートされているキー

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

英字キー
A ... Z
数字キー
0 ... 9
標準のキー文字列

全般 - CommaPeriodHomeEndPageUpPageDownSpaceInsertDelete

矢印キー - UpDownLeftRight

メディアキー – MediaNextTrackMediaPlayPauseMediaPrevTrackMediaStop

修飾キーの文字列

CtrlAlt(macOS では Option)、ShiftMacCtrl(macOS のみ)、Command(macOS のみ)、Search(ChromeOS のみ)

キーの組み合わせの要件

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

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

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

    • 別のプラットフォームの組み合わせで 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"
      }
    }
  },
  ...
}

Service Worker では、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((details) => {
  if (details.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

プロパティ

  • description

    文字列(省略可)

    拡張コマンドの説明

  • name

    文字列(省略可)

    拡張機能コマンドの名前

  • ショートカット

    文字列(省略可)

    このコマンドで有効なショートカットです。有効になっていない場合は空白になります。

メソッド

getAll()

Promise
chrome.commands.getAll(
  callback?: function,
)

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

パラメータ

  • callback

    関数(省略可)

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

    (commands: Command[]) => void

戻り値

  • Promise<コマンド[]>

    Chrome 96 以降

    Promise は Manifest V3 以降でサポートされていますが、下位互換性のためにコールバックが用意されています。同じ関数呼び出しで両方を使用することはできません。Promise はコールバックに渡された型と同じ型で解決されます。

イベント

onCommand

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

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

パラメータ

  • callback

    機能

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

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

    • コマンド

      string

    • タブ

      tabs.Tab オプション