IE仅检测打印屏幕键的第一个键盘(其他每次都工作)

时间:2012-12-05 21:26:53

标签: javascript internet-explorer keyup

这是我的代码:

$(document).keyup(function (e) {
    alert("felt something!");
    if (e.keyCode == 44) {
        alert("felt PS");
        ccd();
    }
});

function ccd() {
    if (clipboardData) {
        window.clipboardData.setData('text', '');
    }
}

在chrome中,ccd函数不执行任何操作(这很好),但每次按下PS按钮时都会弹出“Felt PS”消息。但是,在IE(7-9)中,我可以看到一条“Felt PS”消息。在那之后,击中PS什么都不做,但击中任何其他键会导致“感觉到什么!”。

任何人都有任何想法可能导致此问题?

2 个答案:

答案 0 :(得分:6)

我没有足够的酷点来发表评论,但我知道这一点:

在Internet Explorer中,打印屏幕的KeyUp事件将触发一次 - 仅一次 - 只要先按下另一个键。再次按下另一个键,将再次检测到打印屏幕:但是一次且仅一次。

这适用于各个页面,因此登录网站然后导航几个页面,然后点击打印屏幕:检测到。

让IE在下次访问时记住您的登录信息,导航相同的几页,点击打印屏幕:未检测到。

这就是Chase关于ALT + Print Screen的更新答案正确的原因。通过先按下alt,您可以检测到打印屏幕所需的按键...一次。

使用Javascript创建的伪造键盘事件不足以人为地引发此行为,无论是什么原因导致检测(或不检测)打印屏幕都在IE本身内(因为相同的JS在Firefox中可以正常工作)。 / p>

虽然不能完整回答您的问题,但我希望能够根据自己的经验尝试解决同样的问题。

答案 1 :(得分:3)

对于IE,您需要小心e,因为旧版本的IE使用全局window.event对象。请尝试使用以下代码:

$(document).keyup(function (e) {
    if(!e) e = window.event; //check for e, otherwise use the global window.event
    var keyCode = e.which || e.keyCode //changed as not all browsers use keyCode
    alert("felt something!");
    if (keyCode  == 44) {
        alert("felt PS");
        ccd();
    }
});

function ccd() {
    if(window.clipboardData) { //changed to look for window.clipboardData instead otherwise throws an error in other browsers.
        window.clipboardData.setData('text', '');
    }
}

请注意上面我已更改代码的注释行。

<强> EXAMPLE

<强>更新

您可能需要按ALT + PRINT SCREEN才能使事件注册该键。我现在不是100%肯定为什么,所以如果其他人碰巧知道请编辑答案或留在评论中。

**请注意修改后的代码。