javascript 更改键盘快捷键

j2datikz  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(209)

在我的日常工作中,我必须使用一个平台来发送大量电子邮件,该平台具有默认的键盘快捷键来触发电子邮件提示,该快捷键是“CTRL+ALT+M”。
虽然,我更喜欢用一只手做这个快捷键,到达“M”并不那么容易,所以有没有办法让它按下“CTRL+ALT+X”会触发“CTRL+ALT+M”?
换句话说,我想按“CTRL+ALT+X”将打开一个电子邮件提示,并没有选择tho改变在这个网站的快捷方式。

我已经尝试使用“快捷方式” chrome 扩展,但由于某种原因,它不工作:/

这个也不行
我也试过了,没用

{
    "key": "ctrl+alt+x",
    "action": "trigger",
    "trigger": "ctrl+alt+m",
    "sites": "",
    "sitesArray": [
      ""
    ]
  }
cvxl0en2

cvxl0en21#

您可以调度一个新的KeyboardEvent,它以编程方式发送Ctrl+Alt+M。

const sendOffer = () => alert('New email!');

// Original binding Ctrl + Alt + M (cannot modify)
document.addEventListener('keydown', (keyEvent) => {
  if (keyEvent.code === 'KeyM' && keyEvent.altKey && keyEvent.ctrlKey) {
    sendOffer(); // Internal handler logic in application
  }
});

// New binding Ctrl + Alt + X (alias)
document.addEventListener('keydown', (keyEvent) => {
  if (keyEvent.code === 'KeyX' && keyEvent.altKey && keyEvent.ctrlKey) {
    // If Ctrl + Alt + X it pressed, send Ctrl + Alt + M
    document.dispatchEvent(new KeyboardEvent('keydown', {
      code: 'KeyM',
      altKey: true,
      ctrlKey: true
    }));
  }
  keyEvent.preventDefault();
});
<button
    onclick="sendOffer()"
    title="Send offer by e-mail [Ctrl+Alt+m]">
  Open in new tab
</button>

上面例子的后半部分可以放入用户脚本(Violentmonkey、Greasemonkey等),并在需要密钥的网页上执行。

// ==UserScript==
// @name        Custom keybindings for company website
// @namespace   Violentmonkey Scripts
// @match       https://my-company-website.com/*
// @grant       none
// @version     1.0
// ==/UserScript==
(() => {
  // New binding Ctrl + Alt + X (alias)
  document.addEventListener('keydown', (keyEvent) => {
    if (keyEvent.code === 'KeyX' && keyEvent.altKey && keyEvent.ctrlKey) {
      // If Ctrl + Alt + X it pressed, send Ctrl + Alt + M
      document.dispatchEvent(new KeyboardEvent('keydown', {
        code: 'KeyM',
        altKey: true,
        ctrlKey: true
      }));
    }
    keyEvent.preventDefault();
  });
})();

注:following website有助于诊断键盘事件。

如果您仍然感到困惑,请参阅documentation on MDN

相关问题