使用 Chrome 扩展在 Google 文档中定义热键

Defining a hotkey in Google documents using Chrome extension

我正在尝试在 Google 文档中定义一个新的热键。我正在尝试使用 Chrome 扩展,问题是当文档区域处于活动状态时,浏览器无法收听触发的事件。这是扩展代码。

编辑:这是清单文件

{
  "manifest_version": 2,
  "name": "My Cool Extension",
  "version": "0.1",
"content_scripts": [
  {
    "matches": [
      "<all_urls>"
    ],
    "js": ["jquery-3.2.1.js", "content.js"]
  }
],
"permissions": [
  "tabs"
]
}

这是 content.js 文件

    var map = {17: false};

$('body').keydown(function(e) {
    if (e.keyCode in map) {
        map[e.keyCode] = true;
        if (map[17]) {
console.log("Hi");
        }
    }
}).keyup(function(e) {
    if (e.keyCode in map) {
        map[e.keyCode] = false;
    }
});

以上扩展在任何网站上都可以正常工作。当您按下 ctrl 时,它会记录 "Hi"。如果包含菜单的上栏处于活动状态,则该扩展程序在任何网站和 Google Docs 本身都可以正常工作。当按下 ctrl 键时,它会记录 Hi。但是当文档区域处于活动状态时,代码不会触发。

背景:我正在考虑使用 Chrome 扩展和 Google Apps 脚本来定义自定义热键,只是遇到了在活动文档区域不触发事件的问题。

使用 chrome.commands API 代替 jQuery。

虽然不可见,但文档编辑内容位于 iframe 中。您的 content_script 未在 iframe 上加载。

您可以通过在 manifest.json 中向您的 content_scripts 添加新规则来启用此功能:

    "all_frames": true,
    "match_about_blank": true

第一个允许您的代码在框架上加载。第二个允许在空页面(和框架)上加载。连同你现在的 manifest.json:

{
  "manifest_version": 2,
  "name": "My Cool Extension",
  "version": "0.1",
"content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["jquery.js", "content.js"],
    "all_frames": true,
    "match_about_blank": true
  }
],
"permissions": [
  "tabs"
]
}