在这里,我尝试禁用Ctrl+P但它没有让我警觉,而且它还显示打印选项
jQuery(document).bind("keyup keydown", function(e){
if(e.ctrlKey && e.keyCode == 80){
alert('fine');
return false;
}
});
我不确定如何使用 jQuery 或 JavaScript禁用Ctrl+组合本身。P
谢谢
在这里,我尝试禁用Ctrl+P但它没有让我警觉,而且它还显示打印选项
jQuery(document).bind("keyup keydown", function(e){
if(e.ctrlKey && e.keyCode == 80){
alert('fine');
return false;
}
});
我不确定如何使用 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();
}
代码是从这个优秀的答案中采用的。
更新了小提琴。(打印时显示信息)
经过对各种浏览器的大量测试,在按键按下(未按下)时更容易拦截,因为其中一些“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。
这基本上是彼得斯从上面回答的。不同之处在于我在按下 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();
}
});
您的代码在 jsfiddle 示例中有效吗?你使用的是什么浏览器?用最新的 chrome 对其进行了测试,效果很好。
您还可以添加:
e.preventDefault();
这实际上在 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 的键码不同)
要使用 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);
有一个旅程发现这个,应该在keydown
活动中取消
document.addEventListener('keydown',function(e){
e.preventDefault();
return false;
});
进一步简化为:
document.onkeydown = function(e){
e.preventDefault();
}
假设您只有一个 keydown 事件
有一些你根本无法用 javascript 覆盖的快捷方式,我很难学会。我想 CTRL+P 就是其中之一。
覆盖它们的一种方法是部署一个 chrome 包装的应用程序。
尝试这个
//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:仍然认为有这个问题的人阅读这个答案很重要。