16

在这里,我尝试禁用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

谢谢

4

11 回答 11

25

您不能阻止用户打印,但您可以在用户打印文档时使用简单的 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();
}

代码是从这个优秀的答案中采用的。

更新了小提琴。(打印时显示信息)

于 2013-09-17T07:44:37.823 回答
9

经过对各种浏览器的大量测试,在按键按下(未按下)时更容易拦截,因为其中一些“App集成键”很难通过“keypress”事件进行拦截。

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

chrome上的键“P”被视为e.keyCode == 80,在opera上是e.charCode == 16,而在firefox上是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。

于 2015-06-08T11:24:20.727 回答
2

这基本上是彼得斯从上面回答的。不同之处在于我在按下 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();
    }  
});
于 2019-05-02T17:10:36.393 回答
1

您的代码在 jsfiddle 示例中有效吗?你使用的是什么浏览器?用最新的 chrome 对其进行了测试,效果很好。

您还可以添加:

e.preventDefault();
于 2013-09-17T07:46:32.563 回答
1

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

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(); 
}

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

于 2015-04-27T16:54:18.010 回答
1

要使用 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);
于 2017-12-16T17:08:49.413 回答
1

有一个旅程发现这个,应该在keydown活动中取消

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

进一步简化为:

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

假设您只有一个 keydown 事件

于 2017-01-31T17:38:20.010 回答
0

有一些你根本无法用 javascript 覆盖的快捷方式,我很难学会。我想 CTRL+P 就是其中之一。

覆盖它们的一种方法是部署一个 chrome 包装的应用程序。

于 2013-09-17T07:40:54.467 回答
0

尝试这个

    //hide body on Ctrl + P
    jQuery(document).bind("keyup keydown", function (e) {
        if (e.ctrlKey && e.keyCode == 80) {
            $("body").hide();
            return false;
        }
    });
于 2019-08-10T05:51:10.880 回答
-1
<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>
于 2018-05-11T05:27:29.050 回答
-3

如果您想禁用您的网页打印,那是在浪费您的时间:这是无法完成的。即使您知道如何捕获 CTRL-P 用户仍然可以使用浏览器菜单栏找到打印命令,或者他们可以截取浏览器的屏幕截图。

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

2016 年编辑:在这 3 年里,它已经收集了 3 次反对票。我还是不删。我认为重要的是告诉其他开发人员什么时候给他们不可能的任务,或者没有意义的任务。

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

于 2013-09-17T07:40:20.957 回答