正如其他人所说,没有实际的解决方案可以阻止人们复制内容。此外,如果您强制 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 来呈现仅在全屏时可读的内容。我不确定这是否可行。
我没有测试过这些——这只是我的理论,它应该可以工作,这里和那里有一些调整。
编辑:为了解决人们谈论视图源等问题:您应该使用 ajax 来呈现您的文本。这样,如果他们禁用 JavaScript,他们将什么也看不到,如果他们使用查看源代码,他们仍然什么也看不到。同样,他们可以使用开发人员工具(例如 Inspect Element)来解决它,但如果他们那么精明,无论如何你都不会阻止他们。