最佳实践 - 禁用/避免内容复制

时间:2014-01-08 00:53:58

标签: javascript php jquery testing

好吧,伙计们,我正在为我的网站开发测试系统,我认为人们可能会尝试复制我的问题并在谷歌上搜索它们,或者可能会在测试后打印屏幕来研究问题。< / p>

这些是复制信息的可能方式:
1)按PrintScreen键;
2)按下组合键:Alt + PrintScreen;
3)按鼠标右键,单击复制;
4)按下组合键:Control + C;
5)使用打印工具,如fraps或ms剪切工具;

那么我如何强制用户关闭所有程序,并阻止他使用上面列出的方法?可能是Javascript,或Jquery,但是怎么样?

3 个答案:

答案 0 :(得分:1)

正如之前的所有海报所述,没有办法阻止用户采取任何行动。

然而,您可以通过CSS禁用文本选择并使其更加“不方便”,并且可以阻止您正常的每天用户轻松复制和粘贴。当然,一个精明的用户甚至可以绕过这个,所以它也不是万无一失的。

-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;

希望这有帮助!

答案 1 :(得分:1)

正如其他人所说,没有任何实际的解决方案可以阻止人们复制内容。此外,如果您强制ALT键停止工作,则残障人士将无法再使用您的页面。所以我会做一些完全不同的事情:每当你不想发生的事情发生时,就不可能阅读你的页面(除非参加考试的人知道如何在他们的浏览器中使用开发者工具)。

如果我们假设这是你的CSS样式:

body { 
    user-select:none;  /* try to prevent highlighting of text */
}
.readable {     /* readable = contrasting colors */
     color:black;
     background-color:white;
}
.unreadable {    /* unreadable = the same color */
     color:white;
     background-color:white;
}
.unreadable::selection {     /* for highlighted text, if user-select fails */
     background-color:white;
     color:white;
}

然后这是一个基本的可读性改变功能:

function canYouReadMe(yes) {
    if(yes) {  //we can read black on white
        document.body.setAttribute('class','readable');
    } else {   //we can't read white on white
        document.body.setAttribute('class','unreadable');
    }
}

这是用于处理控件,打印屏幕和alt的JQuery。键落下,你无法阅读页面。键上升,你可以再读一遍。

$(window).keydown(function(e){
    if (e.ctrlKey              //control key
           || e.keyCode == 44  //print screen
           || e.keyCode == 18  //alt key
      ) {
        canYouReadMe(false);
        if(e.ctrlKey) {
           e.preventDefault();  //stop copy-paste but not alt
           return false;
        }
    }
});
$(window).keyup(function(e){
    if (e.ctrlKey              //control key
           || e.keyCode == 44  //print screen
           || e.keyCode == 18  //alt key
      ) {
        canYouReadMe(true);
        if(e.ctrlKey) {
           e.preventDefault(); 
           return false;
        }
    }
});

另一个处理鼠标右键(数字3):

$(window).mousedown(function(e) {
    if (e.which == 3) { 
        canYouReadMe(false);
        e.preventDefault();  //stop the menu from appearing
        return false;
    }
});
$(window).mouseup(function(e) {
    if (e.which == 3) { 
        canYouReadMe(true);
        e.preventDefault();
        return false;
    }
});

以下是停止其他程序和非焦点打印屏幕所需的内容:除非重点关注,否则您的页面将无法读取。因此,如果他们改变到另一个窗口,他们将无法看到任何东西。这也可以防止他们在另一个窗口中输入时简单地阅读您的页面。

$(window).focus(function() {
    canYouReadMe(true);  //read on focus
});

$(window).blur(function() {
    canYouReadMe(false);  //unreadable when focus is lost
});

如果窗口焦点/模糊失败,您可能还会考虑使用CSS,这些CSS只会在全屏时呈现内容。我不确定这是否可行。

我还没有测试过任何这个 - 只是我的理论认为它应该有效,并且在这里和那里进行一些调整。

编辑:解决人们谈论视图来源等问题:您应该使用ajax来渲染文本。这样,如果他们禁用JavaScript,他们什么都看不见,如果他们使用视图源,他们仍然什么也看不见。同样,他们可以使用开发人员工具(例如Inspect Element)来解决它,但如果他们是那么精明,那么无论如何你都不会阻止它们。

答案 2 :(得分:0)

没有技术解决方案,无论是太难还是不可行。

教师有哪些传统方法可以减少复制的使用?制作多个版本。改变一些变量,得到不同的结果。

也许你有更好的想法?