有没有办法在Chrome中重写Ctrl+N以打开新窗口?

7
我在工作中使用一个Web应用程序,我经常使用的快捷方式之一是 Ctrl + M 。 然而,我经常打字很快,会不小心按错 Ctrl + N ,这样就不是触发我的Web应用程序中的操作,而是打开一个新窗口。 我希望能够防止这种情况发生,但我似乎无法找到解决方法。 到目前为止,我已经尝试每次页面加载时运行此代码,但似乎没有什么效果。(忽略我只针对一个键使用switch语句,我有一些其他自定义的 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;
    }
};

3
这是一个浏览器的特性,无法在应用程序级别进行控制。 - VLAZ
2
但是例如,我正在使用的Web应用程序将Ctrl+S覆盖为在Web应用程序内保存而不是将原始HTML保存到磁盘。是否没有办法对Ctr+N执行此操作? - Devin
2
请看这个问题:https://dev59.com/S3DYa4cB1Zd3GeqPDrxs - NullUserException
@Vld 真正的答案是许多浏览器快捷键都可以被拦截。不幸的是,至少对于Chrome来说,Ctrl+N不是其中之一...您可以更改应用程序,以便使用其他快捷键。 - NullUserException
@NullUserException Ctrl + W,Ctrl + T,Ctrl + N,Ctrl + R,F5,Ctrl + Shift + N(对于Chrome,或Firefox中的Ctrl + Shift + P),后退,前进 - 有很多我宁愿保留给自己的快捷键。像PgUp / Down或Ctrl + F这样的东西可能会被覆盖,但仅当它们提供相似的功能时才可以。然而,即使如此,我发现有些应用程序提供的搜索功能有时也不如浏览器查找功能有用 - 例如,如果我想进行区分大小写的搜索(在Chrome中不可用...)或者如果我想突出显示所有出现的情况。更好的应用程序会在我按两次Ctrl + F时将其推迟到浏览器功能。 - VLAZ
显示剩余4条评论
3个回答

18
自2010年起,Google Chrome的版本4开始无法覆盖 Ctrl+NCtrl+TCtrl+W。根据Chromium问题跟踪器上所述:

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

唯一已知的解决方法是将您的网页/扩展程序作为Chrome应用程序打开,在此情况下,它将再次有权限覆盖这些被列入黑名单的按键组合。

1
欢迎来到Stack Overflow!虽然这理论上可以回答问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Enamul Hassan

1

GateOne项目的Github问题讨论中提到了相同的问题这里

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


-2
在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

在你修改的 .Xkeymap 文件中,将 <LatN> 键与其他修饰键(如 <Ctrl>)组合使用时,重新映射为类似于 <F3> 的无害按键:

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

这与Linux无关。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接