任何方式重写Ctrl+N打开一个新的窗口在Chrome

Any way to override Ctrl+N to open a new window in Chrome?

本文关键字:一个 窗口 Chrome 何方 重写 任何方 Ctrl+N      更新时间:2023-09-26

我使用一个web应用程序工作,我经常使用的快捷键之一是Ctrl+M。然而,我经常打字很快,错误地按下Ctrl+N,而不是触发我的web应用程序中的操作,我打开一个新窗口。我希望能够防止这种情况发生,但我似乎不知道该怎么做。到目前为止,我已经尝试在每次页面加载时运行此代码,但它似乎没有做任何事情。(忽略我只使用一个键的开关这一事实,我有一些其他自定义Ctrl快捷键,不覆盖正在工作的Chrome快捷键,我只是为了可读性而删除了它们)

document.onkeydown = function(e) 
{
    if(e.ctrlKey === false)
    {
        return;
    }
    switch(e.which) {
        case 78:
            //just to keep from opening a new tab when merging cells
            e.preventDefault();
            e.stopPropagation();
            break;
        default: 
        return;
    }
};

没有办法覆盖Ctrl+NCtrl+T,或Ctrl+W在Google Chrome自版本4 Chrome(2010年发货)。

如Chromium问题跟踪器所述:

在Chrome4中,某些控制键组合已保留仅供浏览器使用,并且不能再被网页中的客户端JavaScript截获。

唯一已知的解决办法是打开你的网页/扩展作为一个Chrome应用程序,它将再次有权限覆盖这些黑名单键组合

您可以在这里找到GateOne项目讨论相同问题的github问题。

他们说唯一的解决办法是"创建一个应用程序快捷方式",你现在可以覆盖Ctrl+N键。

在Linux下,可以通过在Xorg级别重新定义键盘映射来禁用组合。然后,对于当前会话中在X下运行的所有应用程序,它将被禁用。在全屏模式下运行的kiosk类型的应用程序中,禁用各种控件组合通常很有用。例如,您的.xinitrc可以设置自定义键盘映射:

#!/usr/bin/env bash
        
test -f ~/.Xkeymap && xkbcomp ~/.Xkeymap $DISPLAY &
        
while :; do
/usr/lib/chromium-55.0.2866.0-16k/chrome-wrapper '
--disable-seccomp-filter-sandbox --user-data-dir=.chromium-55.0.2866.0-16k '
--app="http://1.1.1.1:10001/terminal/start" --start-fullscreen '
--kiosk --window-position=0,0 --window-size=1920,1080 
done

修改后的。xkeymap会将<LatN>键重新映射为无害的<F3>键,当与<Ctrl>和其他修饰键结合使用时:

    type "MYCONTROL" {
        modifiers= Shift+Lock+Control+Alt+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[Alt]= Level3;
        map[LevelThree]= Level4;
        map[Shift+LevelThree]= Level5;
        map[Control+Alt]= Level6;
        map[Control]= Level7;
        map[Shift+Control]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "L3 Base";
        level_name[Level5]= "Shift L3";
        level_name[Level6]= "Ctrl+Alt";
        level_name[Level7]= "Ctrl Base";
        level_name[Level8]= "Shift+Ctrl";
    };
...
    key <LatN> {
       type= "MYCONTROL",
       symbols[Group1]= [ n, N, F3, F3, F3, F3, F3, F3 ]
    };