46

CtrlChromeで+をキャッチSし、ページを保存するためのデフォルトのブラウザ動作を防ぎたい。どのように?

(私はかなり長い間この後だったので、質問と回答を投稿するだけで、解決策が見つかりませんでした)

4

4 に答える 4

59

私が見る限り、秘密のソースは、Ctrl+Sはキープレスイベントを発生させず、キーダウンイベントのみを発生させるということです。

jQuery.hotkeysの使用:

$(document).bind('keydown', 'ctrl+s', function(e) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
});

jQueryでのみ:

$(document).bind('keydown', function(e) {
  if(e.ctrlKey && (e.which == 83)) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
  }
});

2012.12.17を編集-jQuery.hotkeysは言う

入力要素の内部にいる場合、ホットキーは追跡されません(ホットキーを入力に直接明示的にバインドしない限り)。これは、通常のユーザー入力との競合を回避するのに役立ちます。

于 2012-06-12T16:29:14.770 に答える
26

ブラウザのcontrol+s(保存機能)のオーバーライドから「借用」

document.addEventListener("keydown", function(e) {
  if (e.key === 's' && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
    e.preventDefault();
    alert('captured');
  }
}, false);
于 2012-06-12T16:42:39.307 に答える
4

document.onkeydown = function (e) {
    e = e || window.event;//Get event
    if (e.ctrlKey) {
        var c = e.which || e.keyCode;//Get key code
        switch (c) {
            case 83://Block Ctrl+S
                e.preventDefault();     
                e.stopPropagation();
            break;
        }
    }
};
   

于 2015-03-31T07:26:13.477 に答える
1

データを防ぐためのオールインワンソリューション

// disable right click
$(function() {
    $(this).bind("contextmenu", function(e) {
        e.preventDefault();
    });
}); 

// Prevent F12      
$(document).keydown(function (event) {
    if (event.keyCode == 123) { // Prevent F12
        return false;
    } else if (event.ctrlKey && event.shiftKey && event.keyCode == 73) { // Prevent Ctrl+Shift+I        
        return false;
    }
});

//stop copy of content
function killCopy(e){
    return false
}
function reEnable(){
    return true
}
document.onselectstart=new Function ("return false")
    if (window.sidebar){
    document.onmousedown=killCopy
    document.onclick=reEnable
}

// prevent ctrl + s
$(document).bind('keydown', function(e) {
  if(e.ctrlKey && (e.which == 83)) {
    e.preventDefault();
    return false;
  }
});
于 2019-12-12T13:23:03.913 に答える