在这里,我尝试禁用 Ctrl + P ,但它不会让我发出警报,而且还会显示打印选项
jQuery(document).bind("keyup keydown", function(e){
if(e.ctrlKey && e.keyCode == 80){
alert('fine');
return false;
}
});
我不知道如何使用jQuery或JavaScript禁用 Ctrl + P 组合。
由于
答案 0 :(得分:19)
您不能阻止用户打印,但是当用户使用简单的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();
}
Updated fiddle。 (打印时显示消息)
答案 1 :(得分:5)
在各种浏览器上进行了大量测试后,当按键关闭(未按下)时更容易拦截按键,因为某些“应用程序集成按键”很难通过“按键”事件进行拦截。
我想出了这种兼容跨浏览器的脚本(我没有测试微软的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.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。
答案 2 :(得分:1)
您的代码在jsfiddle示例中有效吗?你使用的是什么浏览器?用最新的镀铬测试它,它运行良好。
您还可以添加:
e.preventDefault();
答案 3 :(得分:1)
这实际上对我有用铬。我很惊讶。
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在下面有一个downvoted解决方案声称密钥代码对于ff和ie不同)
答案 4 :(得分:1)
有一个journy发现这个,应该在keydown
事件
document.addEventListener('keydown',function(e){
e.preventDefault();
return false;
});
进一步简化为:
document.onkeydown = function(e){
e.preventDefault();
}
鉴于您只有一个keydown事件
答案 5 :(得分:0)
有一些捷径,你根本无法用javascript覆盖,我很难学到它。我想CTRL + P就是其中之一。
覆盖它们的一种方法是部署Chrome pacakged应用程序。
答案 6 :(得分:0)
使用以下代码使用javascript禁用 Ctrl + P 打印:
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello world!");
Console.ReadKey();
}
}
}
答案 7 :(得分:0)
这基本上是彼得斯从上面回答的。区别在于我在按下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();
}
});
答案 8 :(得分:0)
尝试一下
//hide body on Ctrl + P
jQuery(document).bind("keyup keydown", function (e) {
if (e.ctrlKey && e.keyCode == 80) {
$("body").hide();
return false;
}
});
答案 9 :(得分:-2)
如果您要停止打印网页,那么会浪费您的时间:无法完成。即使你弄清楚如何捕获CTRL-P用户仍然可以使用浏览器菜单栏来查找打印命令,或者他们可以拍摄浏览器的屏幕截图。
停止尝试控制用户,投入精力使您的网站/应用更有用,同样有用。
编辑2016:在这已经过去的3年里,它收集了3个downvotes。我还没有删除它。我认为告诉开发人员什么时候给他们不可能的任务,或任务没有任何意义,这很重要。
编辑2018:仍然认为有这个问题的人阅读这个答案很重要。