是否可以捕获CTRL + W快捷方式并阻止标签关闭?

时间:2014-02-11 07:29:29

标签: javascript jquery browser window

$(window).on("keydown", function (e) {
    alert(e.keyCode);
});

W 87个密钥代码。如果在那一刻按下 Ctrl ,我也知道e.ctrlKeytrue

是否可以按 Ctrl + W 按键并阻止标签关闭?

我试过了:

$(window).on("keydown", function (e) {
    if (e.keyCode === 87 && e.ctrlKey) {
        return false;
    }
});

但似乎浏览器快捷方式在这种情况下具有优先权,并且标签已关闭。

我正在寻找一个解决方案:如果通过JavaScript无法实现,也许浏览器插件可以做到这一点。

5 个答案:

答案 0 :(得分:1)

您可以使用“之前卸载”来避免关闭标签。事件

$(window).on('beforeunload', function(e) {
    if(hasUnsaved()) {
        return 'You have unsaved stuff. Are you sure you want to leave?';
    }
});

请参阅:http://hackab.it/2013/05/page-closing-confirm/

答案 1 :(得分:1)

特别是在 Firefox 中很烦人,CTRL+W 无法真正关闭。即使您计划它仅用于个人用途,您的配置或设置中的更改也可能完成这项工作。

但是,您可以使用 javascript 中的“beforeunload”事件作为解决方法。 确保将第三个参数 (useCapture) 设置为 true,以便在其他任何东西拾取之前拦截击键。

代码如下:

addEventListener(
    'beforeunload',
    function(e){
        e.stopPropagation();e.preventDefault();return false;
    },
    true
);

答案 2 :(得分:0)

试试这段代码:

$(window).keypress(function(event) {
            event.preventDefault();

            if (event.which == 119 && event.ctrlKey) {
                alert("Ctrl-W pressed");
            }    

    return false;
});

答案 3 :(得分:0)

这不是对原始提问者的回复,而是对通过搜索发现此问题的任何人的回复。本文旨在为您提供返回老板或客户所需的信息和论据,并告诉他们为何无法实现此设计。 beforeunload解决方案由此问题的最佳答案提供。祝他们上船好运!

此项目中的设计规定,某些javascript代码应阻止用户关闭网页,而不向用户提供对话框。这有一个关键问题:这是恶意网站也试图做的事情。 Web浏览器开发人员致力于防止恶意网站接管用户体验。出于这个原因,没有好办法做到这一点。即使我们找到了解决方案,该解决方案也不会面向未来,并且会在没有警告的情况下突破浏览器更新。

Web浏览器开发人员为我们提供了一个防止网站关闭的解决方案。该解决方案称为" beforeunload解决方案"。 beforeunload解决方案将为用户提供一个对话框,该对话框中的文本将具有标准化的样板文本,其中包含" stay"按钮和"离开"按钮。我们可以在该对话框中添加一些文本,但我们无法删除样板文本,也无法更改,移动或以其他方式操作按钮。 beforeunload解决方案不灵活,但它具有前瞻性。

使用非标准解决方案(也称为黑客)来规避preunload提供的内容将使我们陷入恶意网站和网络浏览器开发者之间的军备竞赛,我们将无法保证我们的网站&# 39; s功能将日常工作。恶意网站经常会发现新的技巧和黑客,以便在屏幕上保留侵入性广告,因此,即使我们发现有一天允许的内容,也可能会被禁止播放。互联网上充斥着不再使用的非标准解决方案,网络浏览器开发人员已关闭这些解决方案!

frontunload解决方案是长期唯一可行的解​​决方案,我们需要接受最终用户可以出于任何原因使用任何标准键盘快捷键关闭我们的网站,这是我们阻止这种情况的唯一方法是一个对话框,要求他们留在网站上。

答案 4 :(得分:0)

我知道它可能与你的场景无关,但我发现CTRL + SHIFT + W快捷键(关闭所有窗口)非常烦人,只需用CTRL-W关闭一大堆标签并使用CTRL- TAB在它们之间移动。您有时会意外按住Shift键,然后当您想要执行CTRL-W时Chrome退出。

因此对于Windows(不确定你是否意味着Linux,但你可以用xbindkeys做同样的事情):

  1. 安装https://www.autohotkey.com
  2. 要禁用Windows上的^ + W快捷方式,请将其添加到AutoHotkey.ahk:
  3. (道歉:如果以下内容未显示在"代码"格式中)

    ^+w::
    SetTitleMatchMode RegEx
    IfWinExist, Google Chrome$
    {
        WinActivate
    }
    return
    

    希望这对于寻找阻止Chrome甚至获得CTRL-SHIFT-W键组合的方法的人来说非常有用。