簡體   English   中英

是否可以捕獲 CTRL+W 快捷方式並防止選項卡關閉?

[英]Is it possible to catch CTRL+W shortcut and prevent tab closing?

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

W87鍵碼。 我也知道e.ctrlKey如果在那一刻按下Ctrltrue

是否可以捕捉Ctrl + W按鍵並防止選項卡關閉?

我試過:

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

但在這種情況下,瀏覽器快捷方式似乎具有優先權,並且選項卡已關閉。

我正在尋找解決方案:如果無法通過 JavaScript 實現,也許瀏覽器插件可以做到這一點。

這不是對原始提問者的回應,而是對通過搜索發現此問題的任何人的回應。 這篇文章旨在為您提供返回給老板或客戶所需的信息和論據,並告訴他們為什么無法實現這種設計。 這個問題的最佳答案提供了 beforeunload 解決方案。 祝他們好運!


本項目中的設計規定,一些javascript代碼應防止用戶關閉網頁,而不向用戶提供對話框。 這有一個關鍵問題:惡意網站也試圖這樣做。 Web 瀏覽器開發人員致力於防止惡意網站接管用戶體驗。 因此,沒有好的方法可以做到這一點。 即使我們找到了解決方案,該解決方案也不會是面向未來的,並且會在瀏覽器更新時毫無預警地崩潰。

Web 瀏覽器開發人員為我們提供了一種防止關閉網站的解決方案。 該解決方案稱為“beforeunload 解決方案”。 beforeunload 解決方案將為用戶提供一個對話框,該對話框中的文本將具有標准化的樣板文本,帶有“停留”按鈕和“離開”按鈕。 我們可以向該對話框添加一些文本,但我們無法刪除樣板文本,也無法更改、移動或以其他方式操作按鈕。 beforeunload 解決方案不靈活,但它是面向未來的。

使用非標准解決方案(也稱為 hack)來規避 beforeunload 提供的內容將使我們陷入惡意網站和 Web 瀏覽器開發人員之間的軍備競賽,我們將無法保證我們網站的功能將始終如一地運行一天一天的。 惡意網站經常會發現新的技巧和竅門來將侵入性廣告保留在屏幕上,因此即使我們發現某天允許的內容,第二天也可能會被禁止。 互聯網上充斥着不再有效的非標准解決方案,網絡瀏覽器開發人員已關閉這些解決方案!

從長遠來看,beforeunload 解決方案是唯一可行的解​​決方案,我們需要接受最終用戶可以出於任何原因使用任何標准鍵盤快捷鍵關閉我們的網站,而我們可以防止這種情況的唯一方法是對話框要求他們留在網站上的框。

您可以使用 'beforeunload' 事件避免選項卡關閉

$(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-closure-confirm/

特別是在 Firefox 中,它很煩人,無法真正關閉 CTRL+W。 即使您只是為了個人使用而計划它,您的配置或設置中的更改也可能完成這項工作。

但是,您可以使用 javascript 中的“beforeunload”事件作為解決方法。 確保將第三個參數 (useCapture) 設置為 true,以便在其他任何東西拾取之前攔截擊鍵。

這是代碼:

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

試試這個代碼:

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

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

    return false;
});

我知道這可能與您的場景無關,但是當您只是使用 CTRL-W 關閉大量選項卡並使用 CTRL-TAB 在它們之間移動時,我發現 CTRL+SHIFT+W 快捷方式(關閉所有窗口)非常煩人。 有時您不小心按住了 shift 鍵,然后當您打算執行 CTRL-W 時 Chrome 會退出。

所以對於 Windows(不確定你是指 Linux,但你可以用 xbindkeys 做同樣的事情):

  1. 安裝https://www.autohotkey.com
  2. 要在 Windows 上禁用 ^+W 快捷方式,請將其添加到 AutoHotkey.ahk 中:

(抱歉:如果以下內容沒有以“代碼”格式顯示)

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

希望這對尋找停止 Chrome 甚至獲得 CTRL-SHIFT-W 組合鍵的方法的人有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM