如何使用javascript或Jquery禁用CTRL + P

How to Disable the CTRL+P using javascript or Jquery?

本文关键字:CTRL 禁用 Jquery 何使用 javascript      更新时间:2023-09-26

在这里我试图禁用Ctrl + P,但它没有给我警报,而且还显示了打印选项

jQuery(document).bind("keyup keydown", function(e){
    if(e.ctrlKey && e.keyCode == 80){
        alert('fine');
        return false;
    }
});

http://jsfiddle.net/qaapD/10/

我不确定如何使用jQuery或JavaScript禁用Ctrl + P组合本身。

谢谢

您无法阻止用户打印,但可以使用简单的 CSS 在用户打印文档时隐藏所有内容:

<style type="text/css" media="print">
    * { display: none; }
</style>

更新的小提琴。

如果您想在访问者

尝试打印时向访问者显示自定义消息,而不仅仅是空白页,可以使用客户端代码,但首先像这样包装所有现有内容:

<div id="AllContent">
    <!-- all content here -->
</div>

并添加带有自定义消息的此类容器:

<div class="PrintMessage">You are not authorized to print this document</div>

现在去掉<style type="text/css" media="print">块,代码将是:

if ('matchMedia' in window) {
    // Chrome, Firefox, and IE 10 support mediaMatch listeners
    window.matchMedia('print').addListener(function(media) {
        if (media.matches) {
            beforePrint();
        } else {
            // Fires immediately, so wait for the first mouse movement
            $(document).one('mouseover', afterPrint);
        }
    });
} else {
    // IE and Firefox fire before/after events
    $(window).on('beforeprint', beforePrint);
    $(window).on('afterprint', afterPrint);
}
function beforePrint() {
    $("#AllContent").hide();
    $(".PrintMessage").show();
}
function afterPrint() {
    $(".PrintMessage").hide();
    $("#AllContent").show();
}

代码是从这个出色的答案中采用的。

更新的小提琴。(打印时显示消息)

在各种浏览器上进行大量测试后,当按键关闭(未按下)时,更容易拦截这些键,因为其中一些"应用程序集成键"很难通过"按键"事件进行拦截。

我想出了这个跨浏览器兼容的脚本(我没有测试Microsoft的IE)。请注意,浏览器为某些键返回不同的代码。就我而言,我想阻止 Ctrl+P。

chrome上的键"P"被视为e.keyCode == 80,在歌剧中,它是e.charCode == 16的,而在火狐上是e.charCode == 112

$(document).on('keydown', function(e) {
    if((e.ctrlKey || e.metaKey) && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
        alert("Please use the Print PDF button below for a better rendering on the document");
        e.cancelBubble = true;
        e.preventDefault();
        e.stopImmediatePropagation();
    }  
});

我用了jQuery。

这基本上是彼得斯从上面回答的。不同之处在于,我在按cmd + p按钮组合打印页面时添加了mac的责任。

$(document).on('keydown', function(e) { 
    if((e.ctrlKey || e.metaKey) && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
        alert("Please use the Print PDF button below for a better rendering on the document");
        e.cancelBubble = true;
        e.preventDefault();
        e.stopImmediatePropagation();
    }  
});

若要使用 JavaScript 禁用 Ctrl+P 打印,请使用以下代码:

window.addEventListener('keydown', function(event) {
    if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
        event.preventDefault();
        if (event.stopImmediatePropagation) {
            event.stopImmediatePropagation();
        } else {
            event.stopPropagation();
        }
        return;
        }
}, true);

你的代码在 jsfiddle 示例中工作?您使用的是什么浏览器?我用最新的铬测试了它,它工作正常。

您还可以添加:

e.preventDefault();

这实际上在铬中对我有用。我很惊讶。

jQuery(document).bind("keyup keydown", function(e){
    if(e.ctrlKey && e.keyCode == 80){
         Print(); e.preventDefault();
    }
});

其中 Print 是我编写的一个函数,它调用 window.print();如果您禁用 Print(),它也可以用作纯阻止程序;

如下所述: https://stackoverflow.com/a/20121038/2102085

window.print() 将暂停,以便您可以像这样添加 onPrintFinish 或 onPrintBegin

function Print(){
    onPrintBegin
    window.print();
    onPrintFinish(); 
}

(同样,这只是铬,但彼得在下面有一个被否决的解决方案,声称 ff 和 ie 的键码不同)

发现

这一点,应该在keydown事件中取消

document.addEventListener('keydown',function(e){
   e.preventDefault();
   return false;
});

进一步简化为:

document.onkeydown = function(e){
   e.preventDefault();
}

假设您只有一个键控事件

这是代码,它对我有用

document.addEventListener("keydown", function(event) {
  if (event.ctrlKey && event.key === "p") {
    event.preventDefault();
  }
});
有一些

快捷方式你根本无法用JavaScript覆盖,我用艰难的方式学会了它。我想CTRL + P就是其中之一。

覆盖它们的一种方法是部署Chrome Pakaged应用程序。

试试这个

    //hide body on Ctrl + P
    jQuery(document).bind("keyup keydown", function (e) {
        if (e.ctrlKey && e.keyCode == 80) {
            $("body").hide();
            return false;
        }
    });
<script>
      function isKeyPressed(event) 
      {
        if(event.ctrlKey == 1)
        {
          alert("Please Submit exam form befor printing");
        }
      }
    </script>
<body onkeydown="isKeyPressed(event)">
<p>this is the solution</p>
</body>

如果你想禁用网页的打印,你就是在浪费你的时间:这是不可能的。即使您知道如何捕获 CTRL-P,用户仍然可以使用浏览器菜单栏查找打印命令,或者他们可以拍摄浏览器的屏幕截图。

停止试图控制用户,把你的精力放在使你的网站/应用程序更有用,而不是更不有用

编辑2016年:在3年中,它已经收集了3个反对票。 我仍然没有删除它。我认为当开发人员被赋予不可能的任务或毫无意义的任务时,告诉他们是很重要的。

编辑2018:仍然认为有这个问题的人阅读这个答案很重要。