在网站上禁用复制

问题描述 投票:0回答:10

我知道不可能阻止世界上最先进的思想,但我想在我的网站上设置最轻微的障碍,以防止我的学生从中复制文本并将该文本作为他们的答案发布。 (如果他们手写,那没问题)。

我非常害怕 JavaScript,因为跨浏览器的不一致。

鉴于我已经加载了 jQuery 并且更喜欢尽可能使用 jQuery,我该怎么做:

  1. 禁用 Ctrl + c
  2. 禁用菜单编辑复制。
javascript jquery keyboard
10个回答
13
投票

创建一个可以做到这一点的函数是多么令人畏惧,你应该目标是清除剪贴板,这样即使用户按 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();">

虽然这还是可以被打败的....


6
投票

只需在关闭前添加以下代码即可 您的网页标签:

<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>

4
投票

我建议你使用:

<div oncopy="return false;">Here you have protected text</div>

可以在这里找到对此方法的支持:http://help.dottoro.com/ljwexqxl.php

它很简单,在我看来对于普通用户来说已经足够了。老实说,没有任何选项可以完全防止复制文本。人们总是可以使用 Chrome 开发者工具,甚至可以从那里复制动态加载的文本。

为了更有效的保护,您应该将

oncopy
放在
<body>
标签中,否则可以通过从外部
<div>
开始选择来复制文本。


3
投票

如果您的文本位于特定的 div 中,您可以在这些 div 上放置一个透明的 div。其次,您可以使所有受保护的文本动态化,并将其从 javascript 注入到 div 中,其中将以编码形式存在——这将击败“查看源代码”。


3
投票
<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>

//使用上面的代码,你的右键将被禁用,并且没有人可以复制你的页面内容


3
投票

一个简单有效的解决方案 - 绑定到“复制”事件并阻止它。您还可以设置要复制的文本(稍后由用户粘贴)。

document.addEventListener('copy', function (e){
    e.preventDefault();
    e.clipboardData.setData("text/plain", "Do not copy this site's content!");
})

2
投票

使用 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>

来源:使用 jQuery 禁用网页上的右键单击、复制、剪切


1
投票

要实现此目的,您需要阻止网页上的鼠标单击和上下文菜单单击。

这是示例代码:

<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>

1
投票

您可以将文本放在属性为只读的输入标签中,并防止用户使用 JS 进行复制。因此,用户甚至无法从开发人员菜单中复制它。


0
投票

如果你想通过 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,
            );
        };
    }, []);
© www.soinside.com 2019 - 2024. All rights reserved.