【问题标题】:Prevent copying text in web-page防止在网页中复制文本
【发布时间】:2012-01-21 22:57:30
【问题描述】:

我有测验应用程序。机器人在聊天中提出不同的问题,这些问题属于不同的知识领域。先回答问题的用户,获得积分。问题是,一些用户在谷歌上搜索答案。我想以某种方式阻止用户处理来自网页的问题和搜索答案。

我什至不确定,这是否可能,无论如何可能有人有任何想法

【问题讨论】:

  • 您打算如何阻止记忆力正常的人在搜索引擎中输入内容?
  • 打字需要更多时间。打字时会问下一个问题
  • 使屏幕全屏,如果它失去焦点或退出全屏检测并永远取消测试。
  • 对同一个问题的 20 个版本进行了改写。
  • 如果用户精通技术,那么他仍然可以使用来自 FIrefox/chrome 的 firebug / 开发人员工具进行复制。所以使用图像是您的最佳选择。

标签: html copy-paste copy-protection


【解决方案1】:

这里: How to disable text selection highlighting using CSS?

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;

当窗口的 onBlur 事件被触发时,不允许他们回答。他们仍然可以使用其他设备,但无法在同一台计算机上作弊。

【讨论】:

  • 这对于放置容器 div 也很有用,您可以在其中显示来自 Google Maps、MapQuest 等的地图。
  • 太棒了。我将它与foggy plugin 一起使用,以便在订阅前隐藏内容。
【解决方案2】:

对于未来可能不想阻止突出显示或希望允许用户复制有限数量的字符的谷歌用户:

  function anticopy(event: ClipboardEvent) {    
    // @ts-ignore
    const clipboardData = event.originalEvent.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
    const txt = window.getSelection().toString() || editor.getWin().getSelection().toString();
    if (txt.length > 200) {
      const no = 'You cannot copy more than 200 characters.';
      clipboardData.setData('text', no);
      clipboardData.setData('text/html', `<p>${no}</p>`);
    } else {
      const html = `<p><span data-user="${user.data.id}"></span> ${txt}</p>`;
      clipboardData.setData('text', txt);
      clipboardData.setData('text/html', html);
    }

    event.preventDefault();
  }

【讨论】:

    【解决方案3】:

    在您粘贴问题的 div 标签中,添加以下代码行:

    <div id="test" onmousedown='return false;' onselectstart='return false;'>
    

    这将防止复制标签内的任何内容...

    【讨论】:

      【解决方案4】:

      如果您使用的是 JQuery,请使用:

      function disableSelection(target){
          $(function() {
               $(this).bind("contextmenu", function(e) {
                   e.preventDefault();
               });
           }); 
           if (typeof target.onselectstart!="undefined") //For IE 
                target.onselectstart=function(){return false}
           else if (typeof target.style.MozUserSelect!="undefined") //For Firefox
                target.style.MozUserSelect="none"
           else //All other route (For Opera)
                target.onmousedown=function(){return false}
           target.style.cursor = "default";
      }
      

      在你想禁用的地方调用这个函数。

      $(document).ready(function(){
           disableSelection(document.body);
      });
      

      【讨论】:

        【解决方案5】:

        没有很好的方法来做到这一点。作弊者几乎可以解决所有问题。

        唯一想到的是将问题输出为动态生成的图像。这将防止复制粘贴。不过,您必须确定真正的保护程度 - 大多数简短的问题都可以立即输入 Google,不是吗?

        【讨论】:

          【解决方案6】:

          请注意,希望通过浏览器端的 Greasemonkey 脚本等覆盖禁止复制规则的人可能会通过 Google 找到此问题。

          除了选择禁用之外,我在至少一个网站上看到过以下策略:

          <body oncopy="return false" onpaste="return false" oncut="return false">...</body>
          

          【讨论】:

            【解决方案7】:

            您能否在包含测验/问题的元素顶部放置一个透明的 PNG?

            【讨论】:

              【解决方案8】:
              <head>
              <script type='text/javascript'>
              var isCtrl = false;
              document.onkeyup=function(e)
              {
              if(e.which == 17)
              isCtrl=false;
              }
              document.onkeydown=function(e)
              {
              if(e.which == 123)
              isCtrl=true;
              if (((e.which == 85) || (e.which == 65) || (e.which == 88) || (e.which == 67) || (e.which == 86) || (e.which == 2) || (e.which == 3) || (e.which == 123) || (e.which == 83)) && isCtrl == true)
              {
              alert('This is Function Disabled');
              return false;
              }
              }
              // right click code
              var isNS = (navigator.appName == "Netscape") ? 1 : 0;
              if(navigator.appName == "Netscape") document.captureEvents(Event.MOUSEDOWN||Event.MOUSEUP);
              function mischandler(){
                  alert('This is Function Disabled');
              return false;
              }
              function mousehandler(e){
              var myevent = (isNS) ? e : event;
              var eventbutton = (isNS) ? myevent.which : myevent.button;
              if((eventbutton==2)||(eventbutton==3)) return false;
              }
              document.oncontextmenu = mischandler;
              document.onmousedown = mousehandler;
              document.onmouseup = mousehandler;
              //select content code disable  alok goyal
              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>
              </head>
              
              <body>
                <h2>Disable code right click and ctrl a, ctrl u, ctrl c, ctrl v key and f12 and select content code</h2>
                <div>
                  Some text...
                </div>
              </body>
              

              【讨论】:

                【解决方案9】:

                您也可以将页面设置为图像而不是 html/文本。

                从图像中复制文本并不容易。它必须被保存并进行 OCR 处理。

                【讨论】:

                  【解决方案10】:

                  你可以用谷歌查询每个给定的答案,如果没有完全匹配,很可能是用户自己输入的,你可以给积分。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-03-17
                    • 1970-01-01
                    • 2018-11-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多