Javascript 最佳做法-禁用/避免内容复制

Javascript 最佳做法-禁用/避免内容复制,javascript,php,jquery,testing,Javascript,Php,Jquery,Testing,伙计们,我正在为我的网站开发一个测试系统,我假设人们可能会复制我的问题并在谷歌上搜索,或者在测试后打印屏幕来研究问题 以下是复制信息的可能方式: 1) 按PrintScreen键 2) 按组合键:Alt+PrintScreen 3) 按鼠标右键,单击“复制” 4) 按组合键:Control+C 5) 使用打印工具,如fraps或ms剪切工具 那么,我如何才能强制用户关闭所有程序,并阻止他使用上面列出的方法呢?可能是Javascript或Jquery,但如何实现呢 没有技术解决方案,要么太难,要么

伙计们,我正在为我的网站开发一个测试系统,我假设人们可能会复制我的问题并在谷歌上搜索,或者在测试后打印屏幕来研究问题

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


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

没有技术解决方案,要么太难,要么不可行

教师有哪些传统方法来减少抄袭的使用?制作多个版本。改变一些变量,会有不同的结果


也许你有更好的想法?

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

然而,你可以通过css禁用文本选择,让它变得更“不方便”,并可能阻止你的普通用户如此轻松地复制和粘贴。当然,一个精明的用户甚至可以绕过这个,所以它也不是傻瓜

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

希望这有帮助

正如其他人所说,没有真正的解决方案可以阻止人们复制东西。此外,如果强制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).focus(function() {
    canYouReadMe(true);  //read on focus
});

$(window).blur(function() {
    canYouReadMe(false);  //unreadable when focus is lost
});
如果窗口聚焦/模糊失败,您还可以考虑使用CSS,使内容仅在全屏显示时才可读。我不确定这是否可行

我没有测试过任何一个——这只是我的理论,它应该是有效的,在这里和那里有一些调整


编辑:为了解决人们谈论的视图源代码等问题:您应该使用ajax来呈现文本。这样,如果他们禁用JavaScript,他们将什么也看不到,如果他们使用view source,他们仍然什么也看不到。同样,他们可以使用开发人员工具(如Inspect Element)来解决这个问题,但如果他们这么精明,你也不会阻止他们

这两种保护方法都不起作用,所以不要再烦你的用户了。绝对没有意义。“总是”有另一个工作要做。你只会把人们赶走,投入时间和金钱试图阻止他们,最后却一无所获。你做不到。由于JavaScript在客户端运行,因此用户可以对其进行操作。例如,他们可以简单地在浏览器中禁用JavaScript。或者他们可以运行脚本,使您无法尝试使用他们的程序和组合键。。。。。然后我可以拿着相机在屏幕前拍照。这就是为什么那些进行在线测试但希望保护自己的测试问题的组织(比如)只在受控环境中进行测试,在这种环境中,他们会有人监视每一位参与者。尽管如此,有一种简单的方法可以使一个问题至少无法复制和粘贴:将其呈现在图像中。
$(window).focus(function() {
    canYouReadMe(true);  //read on focus
});

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