我知道不可能阻止世界上最先进的思想,但我想在我的网站上设置最轻微的障碍,以防止我的学生从中复制文本并将该文本作为他们的答案发布。 (如果他们手写,那没问题)。
我非常害怕 JavaScript,因为跨浏览器的不一致。
鉴于我已经加载了 jQuery 并且更喜欢尽可能使用 jQuery,我该怎么做:
创建一个可以做到这一点的函数是多么令人畏惧,你应该目标是清除剪贴板,这样即使用户按 Ctrl + C,也不会将任何内容复制到剪贴板中,像这样的简单函数应该可以解决问题:
<script language="javascript">
function clearData(){
window.clipboardData.setData('text','')
}
function cldata(){
if(clipboardData){
clipboardData.clearData();
}
}
setInterval("cldata();", 1000);
</script>
<body ondragstart="return false;" onselectstart="return false;" oncontextmenu="return false;" onload="clearData();" onblur="clearData();">
虽然这还是可以被打败的....
只需在关闭前添加以下代码即可 您的网页标签:
<script>
function killCopy(e){
return false;
}
function reEnable(){
return true;
}
document.onselectstart=new Function ("return false");
if (window.sidebar){
document.onmousedown=killCopy;
document.onclick=reEnable;
}
</script>
我建议你使用:
<div oncopy="return false;">Here you have protected text</div>
可以在这里找到对此方法的支持:http://help.dottoro.com/ljwexqxl.php
它很简单,在我看来对于普通用户来说已经足够了。老实说,没有任何选项可以完全防止复制文本。人们总是可以使用 Chrome 开发者工具,甚至可以从那里复制动态加载的文本。
为了更有效的保护,您应该将
oncopy
放在 <body>
标签中,否则可以通过从外部 <div>
开始选择来复制文本。
如果您的文本位于特定的 div 中,您可以在这些 div 上放置一个透明的 div。其次,您可以使所有受保护的文本动态化,并将其从 javascript 注入到 div 中,其中将以编码形式存在——这将击败“查看源代码”。
<script type="text/javascript" language="javascript">
$(function() {
$(this).bind("contextmenu", function(e) {
e.preventDefault();
});
});
</script>
<script type="text/JavaScript">
function killCopy(e){ return false }
function reEnable(){ return true }
document.onselectstart=new Function ("return false");
if (window.sidebar)
{ document.onmousedown=killCopy;
document.onclick=reEnable; }
</script>
//使用上面的代码,你的右键将被禁用,并且没有人可以复制你的页面内容
一个简单有效的解决方案 - 绑定到“复制”事件并阻止它。您还可以设置要复制的文本(稍后由用户粘贴)。
document.addEventListener('copy', function (e){
e.preventDefault();
e.clipboardData.setData("text/plain", "Do not copy this site's content!");
})
使用 jQuery 可以轻松地在网页上禁用选择文本、复制、右键单击。下面是简单的 jQuery 代码片段,可以轻松完成此任务:
<script type="text/javascript">
// Disable right click on web page
$("html").on("contextmenu",function(e){
return false;
});
// Disable cut, copy and paste on web page
$('html').bind('cut copy paste', function (e) {
e.preventDefault();
});
</script>
要实现此目的,您需要阻止网页上的鼠标单击和上下文菜单单击。
这是示例代码:
<script language="JavaScript1.2">
var msgpopup="COPYING CONTENT IS PROHIBITED";
function handle(){
if(toShowMessage== "1") alert(message);
if(closeSelf== "1") self.close();
return false;
}
function mouseDown() {
if (event.button == "2" || event.button == "3"){handle();}
}
function mouseUp(e) {
//if (document.layers || (document.getElementById && !document.all)){
if (e.which == "2" || e.which == "3"){ handle();}
//}
}
document.onmousedown=mouseDown;
document.onmouseup=mouseUp;
document.oncontextmenu=new Function("alert(msgpopup);return false")
</script>
您可以将文本放在属性为只读的输入标签中,并防止用户使用 JS 进行复制。因此,用户甚至无法从开发人员菜单中复制它。
如果你想通过 React 来实现这一点,你可以通过以下方式实现:
useEffect(() => {
const preventCopyPaste = (e: any) => {
e.preventDefault();
};
document.documentElement.addEventListener("cut", preventCopyPaste);
document.documentElement.addEventListener("copy", preventCopyPaste);
document.documentElement.addEventListener("paste", preventCopyPaste);
return () => {
document.documentElement.removeEventListener(
"cut",
preventCopyPaste,
);
document.documentElement.removeEventListener(
"copy",
preventCopyPaste,
);
document.documentElement.removeEventListener(
"paste",
preventCopyPaste,
);
};
}, []);