微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

参考:Keyboard Shortcuts in Microsoft Edge

我玩了一会儿,试图使用 JavaScript 来规避这一点:

<!DOCTYPE html>
<html>
<head>
    <title>Ctrl + Shift + T</title>
    <script type="text/javascript">
        var tKey = 84;

        function logKeys(event) {
            console.log(event.type + ": " + event.keyCode);

            if (event.keyCode === tKey) {
                event.preventDefault();
                event.stopPropagation();
                setTimeout(function() { window.focus(); },200);
            }
        }

        document.documentElement.addEventListener("keydown",logKeys);
        document.documentElement.addEventListener("keypress",logKeys);
        document.documentElement.addEventListener("keyup",logKeys);
    </script>
</head>
<body>
</body>
</html>

我希望使用 JavaScript 来“取消”键盘事件,这样 Edge 就不会重新打开之前打开的选项卡或窗口。 Edge 键盘快捷键仍然优先。事实上,浏览器控制台甚至没有为 T注册日志消息,如 event.keyCode 84 所示。

也许我的 JavaScript 代码有点生疏了。

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

解决方法

这可以使用(目前处于实验阶段)Keyboard Lock API,它在 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全屏触发的全屏事件对于F11全屏不会发送。

由于这些差异(并且因为 F11 全屏没有标准快捷键),Keyboard Lock API 仅在 JavaScript 启动的全屏处于活动状态时有效。在 F11 全屏期间,不会进行键盘事件的键盘锁定处理。

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

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

更多信息:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。