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

时间:2013-09-17 07:36:10

标签: javascript jquery

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

由于

10 个答案:

答案 0 :(得分:19)

您不能阻止用户打印,但是当用户使用简单的CSS打印文档时,您可以隐藏所有内容:

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

Updated fiddle

如果您希望在访客尝试打印而不是空白页时向其显示自定义消息,则可以使用客户端代码,但首先将所有现有内容包装成如下:

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

代码来自this excellent answer

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:仍然认为有这个问题的人阅读这个答案很重要。