有没有办法覆盖Ctrl + N在Chrome中打开一个新窗口?

时间:2016-08-08 20:51:58

标签: javascript google-chrome

我使用网络应用程序进行工作,我经常使用的其中一个快捷方式是 Ctrl + M 。但是,我经常打字非常快,错误地点击 Ctrl + N ,而不是在我的网络应用程序中触发操作,我打开一个新窗口。我希望能够阻止这一点,但我似乎无法弄清楚如何。到目前为止,我已经尝试每次加载页面时都运行此代码,但它似乎没有做任何事情。 (忽略我只使用一个开关只有一个键的事实,我有一些其他自定义的 Ctrl 快捷方式,它们不会覆盖正在运行的Chrome快捷方式,我只是删除了它们以便于阅读)< / p>

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;
    }
};

3 个答案:

答案 0 :(得分:5)

无法覆盖 Ctrl + N Ctrl + T Ctrl自Chrome第4版(2010年发布)以来,谷歌Chrome中的 + W

正如the Chromium issue tracker所述:

  

在Chrome4中,某些控制键组合仅保留用于浏览器使用,并且无法再被网页中的客户端JavaScript拦截。

只有已知的解决方法是将您的网页/扩展程序打开为Chrome应用,然后再次获得覆盖这些列入黑名单的密钥组合的权限

答案 1 :(得分:0)

您可以通过GateOne项目找到github问题,讨论相同的问题here

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

答案 2 :(得分:0)

在 Linux 下,可以通过在 Xorg 级别重新定义键盘映射来禁用组合。然后它将对当前会话中在 X 下运行的所有应用程序禁用。在以全屏模式运行的自助服务终端类型的应用程序中禁用各种控制组合通常很有用。例如,您的 .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

当与 <LatN> 和其他修饰键结合使用时,修改后的 .Xkeymap 会将 <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 ]
    };