“如何禁用”;重新打开最后一个选项卡";在Microsoft Edge(Ctrl+;Shift+;T)中使用JavaScript?

“如何禁用”;重新打开最后一个选项卡";在Microsoft Edge(Ctrl+;Shift+;T)中使用JavaScript?,javascript,keyboard-shortcuts,microsoft-edge,keyboard-events,Javascript,Keyboard Shortcuts,Microsoft Edge,Keyboard Events,我们有一个web应用程序,它定义了一组键盘快捷键。其中一个选项是Ctrl+Shift+T。问题是Microsoft Edge将此键组合挂起以重新打开以前关闭的选项卡或窗口,然后切换到该选项卡或窗口 参考文献: 我玩了一会儿,试图用JavaScript绕过这个问题: Ctrl+Shift+T var-tKey=84; 功能日志键(事件){ console.log(event.type+“:”+event.keyCode); 如果(event.keyCode===tKey){ event.prev

我们有一个web应用程序,它定义了一组键盘快捷键。其中一个选项是Ctrl+Shift+T。问题是Microsoft Edge将此键组合挂起以重新打开以前关闭的选项卡或窗口,然后切换到该选项卡或窗口

参考文献:

我玩了一会儿,试图用JavaScript绕过这个问题:


Ctrl+Shift+T
var-tKey=84;
功能日志键(事件){
console.log(event.type+“:”+event.keyCode);
如果(event.keyCode===tKey){
event.preventDefault();
event.stopPropagation();
setTimeout(函数(){window.focus();},200);
}
}
document.documentElement.addEventListener(“向下键”,日志键);
document.documentElement.addEventListener(“按键”,日志键);
document.documentElement.addEventListener(“keyup”,logKeys);
我希望使用JavaScript“取消”键盘事件,以便Edge不会重新打开以前打开的选项卡或窗口。边缘键盘快捷键仍然优先。事实上,浏览器控制台甚至没有为T键注册日志消息,如
event.keyCode
84所示

也许我的JavaScript排骨有点生锈了


当使用JavaScript按Ctrl+Shift+T时,是否有方法防止Edge重新打开上一个选项卡或窗口?

这可以使用(目前处于试验阶段),Chrome和Edge中提供(但目前不在IE、Firefox或Safari中提供):

丰富的交互式网站、游戏和远程桌面/应用程序流媒体体验希望提供身临其境的全屏体验。为了实现这一点,网站需要在全屏模式下访问特殊键和键盘快捷键,以便用于导航、菜单或游戏功能。可能需要的一些键示例有Escape、Alt+Tab、Cmd+`和Ctrl+N

默认情况下,这些键对web应用程序不可用,因为它们由浏览器或底层操作系统捕获。键盘锁API使网站能够捕获和使用操作系统允许的所有可用密钥

请注意,出于可用性原因,此API仅在应用程序使用全屏API启动全屏模式时有效。您不能干扰标准浏览器键盘快捷键,否则:

现代用户代理中有两种不同类型的全屏:JavaScript启动的全屏(通过[fullscreen]API)和用户启动的全屏(当用户使用键盘快捷键进入全屏时)。用户启动的全屏通常称为“F11”全屏,因为这是用于进入和退出全屏模式的常用快捷键

F11全屏和JavaScript(JS)全屏的行为方式不同。当用户进入F11全屏时,他们只能通过与输入时相同的键盘快捷键退出它——在这种情况下,exitFullscreen()函数将不起作用。此外,通常为JS fullscreen触发的全屏事件不会为F11 fullscreen发送

由于这些差异(以及F11全屏没有标准快捷键),键盘锁定API仅在JavaScript启动的全屏激活时有效。在F11全屏显示期间,不会对键盘事件进行键盘锁定处理

因此,在您的情况下,要捕获Ctrl+Shift+T,您需要使用全屏API进入全屏模式(您可能希望首先获得用户的同意;意外进入全屏模式将是一种糟糕的用户体验),然后使用键盘锁定API锁定T键:

document.documentElement.requestFullscreen().then(() => {
  console.log("In fullscreen.");
  navigator.keyboard.lock(["KeyT"]).then(() => {
    console.log("Ctrl+Shift+T locked");
  });
})
更多信息:


是什么让你的应用程序如此重要,以至于阻止用户使用浏览器?JavaScript无法做到这一点。你需要使用不同的键盘快捷键。这是一个非常糟糕的设计理念。您不应试图更改客户端的标准操作。不用说,任何人都可以非常简单地重写您的代码。@ScottMarcus(和其他人)不幸的是,这是一个供应商应用程序。还有一个旧的。该供应商稍后会推出升级版,但与此同时,我们有视力受损的用户依赖于Internet Explorer和JAWS屏幕阅读器中使用的键盘快捷键,而现在它已被Edge和JAWS破坏。否则我完全同意你的看法。这很有效!它至少为我们提供了一种适应用户的方式,直到可以安装新版本的应用程序,这可能需要几年时间。一旦我能奖励赏金,我就要多加几个假互联网点数。谢谢