0

这是我的代码:

$(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 没有任何作用,但按任何其他键都会导致“感觉到什么!”。

任何人有任何想法可能导致这个问题?

4

2 回答 2

6

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

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

这适用于页面,因此登录网站然后浏览多个页面,然后点击打印屏幕:检测到。

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

这就是为什么大通关于 ALT + Print Screen 的更新答案是正确的。通过首先按下alt,您已经导致检测到打印屏幕所需的按键......一次。

使用 Javascript 创建的伪造键盘事件不足以人为地诱导这种行为,无论是什么导致打印屏幕被检测(或不检测)都位于 IE 本身中(因为相同的 JS 在 Firefox 中也可以正常工作)。

虽然不是您问题的完整答案,但我希望可以根据我自己尝试解决相同问题的经验提供一些见解。

于 2013-08-08T21:12:34.047 回答
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', '');
    }
}

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

例子

更新

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

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

于 2012-12-05T21:51:32.800 回答