命令

类型 对象
必填
清单版本 2 或更高
示例
json
"commands": {
  "toggle-feature": {
    "suggested_key": {
      "default": "Ctrl+Shift+Y",
      "linux": "Ctrl+Shift+U"
    },
    "description": "Send a 'toggle-feature' event"
  }
}

使用commands 键为你的扩展定义一个或多个键盘快捷键。

每个键盘快捷键都使用名称按键组合描述进行定义。在扩展的 manifest.json 中定义命令后,可以使用 commands JavaScript API 侦听其关联的按键组合。

语法

commands 键是一个对象,每个快捷键都是它的属性。属性的名称是快捷键的名称。

每个快捷键的值都是一个对象,最多包含 2 个属性

  1. suggested_key:激活快捷键的按键组合。
  2. description:描述快捷键的字符串;即它执行的操作。

suggested_key 属性是一个对象,具有以下任何属性(全部为字符串)

  • "default"
  • "mac"
  • "linux"
  • "windows"
  • "chromeos"
  • "android"
  • "ios"

每个属性的值是该平台上命令的键盘快捷键,作为包含用“+”分隔的键的字符串。"default" 的值用于所有未明确列出的平台。

例如

json
"commands": {
  "toggle-feature": {
    "suggested_key": {
      "default": "Alt+Shift+U",
      "linux": "Ctrl+Shift+U"
    },
    "description": "Send a 'toggle-feature' event to the extension"
  },
  "do-another-thing": {
    "suggested_key": {
      "default": "Ctrl+Shift+Y"
    }
  }
}

此 JSON 定义了 2 个快捷键

  1. "toggle-feature",在 Linux 上使用 Ctrl + Shift + U 访问,在所有其他平台上使用 Alt + Shift + U 访问。
  2. "do-another-thing",在所有平台上使用 Ctrl + Shift + Y 访问。

然后,你可以使用如下代码侦听 "toggle-feature" 命令

js
browser.commands.onCommand.addListener((command) => {
  if (command === "toggle-feature") {
    console.log("Toggling the feature!");
  }
});

特殊快捷键

有 4 个具有默认操作的特殊快捷键,对于这些快捷键,commands.onCommand 事件不会触发

这些特殊快捷键的可用性因清单版本和浏览器而异,如下所示

清单 V2 清单 V3
_execute_browser_action
_execute_action
_execute_page_action 仅限 Firefox
_execute_sidebar_action 仅限 Firefox 仅限 Firefox

注意:如果用户更改了 _execute_browser_action 命令的快捷键,则当扩展从清单 V2 迁移到 V3 时,它会自动迁移到 _execute_action 命令。此功能在 Chrome 111 和 Firefox 127 中实现。

例如,此 JSON 定义了一个单击扩展浏览器操作的按键组合

json
"commands": {
  "_execute_browser_action": {
    "suggested_key": {
      "default": "Ctrl+Shift+Y"
    }
  }
}

快捷键值

快捷键有两种有效格式:按键组合媒体键

按键组合

注意:在 Mac 上,"Ctrl" 被解释为 "Command",因此,如果你确实需要 "Ctrl",请指定 "MacCtrl"

按键组合必须包含 2 或 3 个键

  1. 修饰键(必填,功能键除外)。可以是以下任何一个:"Ctrl""Alt""Command""MacCtrl"
  2. 辅助修饰键(可选)。如果提供,则必须是 "Shift" 或(对于 Firefox ≥ 63)"Ctrl""Alt""Command""MacCtrl" 中的任何一个。不能与用作主要修饰键的修饰键相同。
  3. (必填)。可以是以下任何一个
    • 字母 AZ
    • 数字 09
    • 功能键 F1F12
    • CommaPeriodHomeEndPageUpPageDownSpaceInsertDeleteUpDownLeftRight

然后,键将作为包含以上列出的一组键值的字符串给出,这些键值按顺序用“+”分隔。例如,"Ctrl+Shift+Z"

如果按键组合已被浏览器(如 "Ctrl+P")或现有附加组件使用,则无法覆盖它。你可以定义它,但当用户按下按键组合时,你的事件处理程序将不会被调用。

媒体键

或者,快捷键可以指定为以下媒体键之一

  • "MediaNextTrack"
  • "MediaPlayPause"
  • "MediaPrevTrack"
  • "MediaStop"

更新快捷键

可以通过 commands.update() 更新快捷键。用户还可以通过 Firefox 中 about:addons 的“管理扩展快捷键”选项更新快捷键,如 此视频 中所示。在 Chrome 中,用户可以在 chrome://extensions/shortcuts 中更改快捷键。

示例

定义单个键盘快捷键,仅使用默认按键组合

json
"commands": {
  "toggle-feature": {
    "suggested_key": {
      "default": "Ctrl+Shift+Y"
    },
    "description": "Send a 'toggle-feature' event"
  }
}

定义两个键盘快捷键,其中一个具有特定于平台的按键组合

json
"commands": {
  "toggle-feature": {
    "suggested_key": {
      "default": "Alt+Shift+U",
      "linux": "Ctrl+Shift+U"
    },
    "description": "Send a 'toggle-feature' event"
  },
  "do-another-thing": {
    "suggested_key": {
      "default": "Ctrl+Shift+Y"
    }
  }
}

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。