【问题标题】:Disable Copying on a website在网站上禁用复制
【发布时间】:2011-12-03 03:30:51
【问题描述】:

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

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

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

  1. 禁用 Ctrl + c
  2. 禁用菜单编辑复制。

【问题讨论】:

  • 你在浪费时间。一旦一个发现如何绕过你采取的任何措施,一切都会结束。
  • 您总是可以使用 say php 将文本放入图像中并仅显示图像。但是 ocr 可以做得不错(甚至谷歌文档也有能力做到这一点)。最好的建议,要么不在乎(我喜欢这个),要么提出无法复制答案的问题。
  • 只要他们重新输入文字,他们复制他们的答案就可以了吗?谈论老学校的学习!也许你应该让他们在石板上工作,这样他们就不能复制和粘贴了。让他们复制他们想要的一切——他们会在测试时付出代价。为什么要浪费时间来阻止最终伤害他们的事情?
  • 乔恩:希望这个学期能在有人弄明白和消息传出之前结束。
  • Blender:我一有机会就使用 jQuery,因为我永远不知道 FF、IE、Chrome、Safari 等会出现什么问题。

标签: javascript jquery keyboard


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    虽然这仍然可以被击败....

    【讨论】:

    • 一切都可以被打败。想到在浏览器中禁用 JavaScript 或在 Firebug 中对其进行调整。
    • 是的,这很好。它不断清除剪贴板。我没有考虑到这一点 - 我在考虑前端。
    • 可以设置Interval("cldata();", 1000);不用引号重写?
    • 为什么 clipboardData.clearData() 在一个地方,而 clipboardData.setData('text','') 在另一个地方?
    • @cf_PhillipSenn 您必须在循环中连续使用 setInterval 调用该函数。在这种情况下为 1 秒。没有引号,它将无法工作。
    【解决方案3】:

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

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

    【讨论】:

    • 我没有意识到我没有接受任何以前的答案。我得试试你的解决方案@Amit。
    • 此代码不适用于最新的 Firefox (43.0.4),因此不应使用。人们无法填写表单,例如登录字段。
    【解决方案4】:

    我建议你使用:

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

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

    这很简单,我认为对于普通用户来说已经足够了。老实说,没有选项可以完全防止复制文本。例如,您始终可以使用 Chrome 开发人员工具,甚至可以从那里复制动态加载的文本。

    为了更有效的保护,您应该将oncopy 放在&lt;body&gt; 标记中,否则可能会通过从外部&lt;div&gt; 开始选择来复制文本。

    【讨论】:

      【解决方案5】:

      使用 jQuery 可以轻松地在网页上禁用选择文本、复制、右键单击。下面是简单的 jQuery 代码 sn-p 可以轻松完成这项任务:

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

      来源:Disable right click, copy, cut on web page using jQuery

      【讨论】:

        【解决方案6】:
        <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>
        

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

        【讨论】:

          【解决方案7】:

          如果您的文本包含在特定的 div 中,您可以在这些 div 之上放置一个透明的 div。其次,您可以使所有受保护的文本动态化,并将其从 javascript 注入到 div 中,其中将以编码形式存在 - 这会破坏“视图源”。

          【讨论】:

          • 我喜欢这两个想法。我想我知道如何用 jQuery ajax 命令注入它,但是什么是透明 div?
          • 透明 div 只是一个没有背景的 div,它需要足够大来覆盖你想要保护的东西——它必须有一个高 z-index,所以它可以打开top [div style="position:absolute;left:0px;top:0px;width:10000px;height:10000px;z-index:9999"] -- 在 BODY 中会覆盖整个页面并使所有内容都无法点击等 --您将需要动态创建它以获得正确的高度和宽度,否则您的滚动条会变得很大。
          • 任何网页都可以检查。
          【解决方案8】:

          要实现这一点,您需要在网页上阻止鼠标点击和上下文菜单点击。

          这是一个示例代码:

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

          【讨论】:

          • 我喜欢这个。 Q:为什么mouseDown不包含e作为参数?
          【解决方案9】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-21
            • 1970-01-01
            • 2013-12-25
            • 2015-02-09
            • 1970-01-01
            • 1970-01-01
            • 2013-03-30
            • 1970-01-01
            相关资源
            最近更新 更多