【问题标题】:Disabling Copy/Paste in a Web Page禁用网页中的复制/粘贴
【发布时间】:2010-06-11 06:47:52
【问题描述】:

如何在我的网页中禁用复制粘贴功能。准确地说,我不希望我的用户从我的网站复制任何信息并将其用于个人目的。上一个关于同一主题的问题没有给出足够的解释。 onselect 和 ondrag 不起作用。请帮忙。

【问题讨论】:

  • 嘿!是的...我知道如果人们不想复制我的信息,请不要放它和东西..! :P 你听起来很有趣 :) 他们可以截取屏幕截图和其他东西……但我想禁用复制和粘贴功能……仅此而已……即使他们想要从 viewsource 中获取……让他们接受……但不是直接从内容...请帮助:)
  • 请理解我需要一个可以禁用它的 SCRIPT... 诸如不可选择之类的东西...谢谢您给我一票否决...!我需要的是一个脚本:(
  • @1s2 反对票不是我的,但算了。可以禁用脚本。您的问题无法通过技术手段解决。
  • 嘿嘿..!我的意思不是投反对票是你的!和平!我只是把它交给给这个的人..!我见过很多网站没有给你选择的功能......!那是禁用的......如果有人能够做到......应该有办法......

标签: javascript html


【解决方案1】:

我不希望我的用户复制任何 来自我网站的信息和使用 出于个人目的

没有办法做到这一点。如果有人真的想要你的信息,他们可以得到它。

使用 javascript 或其他方式禁用某些功能可能会给他们带来一些麻烦……但您只会给对技术不太了解的人带来麻烦。通常这些人甚至不会试图复制您的数据。那些人,会想办法的。

【讨论】:

  • 是的..!没关系..!我该如何给“对技术知之甚少的人”带来麻烦?
  • 当我无法通过谷歌找到它时,我来了堆栈溢出。我想要具体的答案,对于这样的答案,我可以使用 Yahoo Answers :P
  • 查看最佳答案!
【解决方案2】:

如果您在线发布信息,则应在页面上明确说明您的版权主张(或说明您发布内容所依据的许可类型)。请查找并阅读您所在地区的版权法,以了解这允许和不允许什么 - 例如,在英国,有关于制作受版权保护材料的个人副本以及使用受版权保护作品的部分进行批判性审查或模仿的规定。

您无法阻止人们复制您网页上的内容。你可以让他们更难做——但这会对你的页面产生负面影响。诸如防止鼠标左键单击、拦截键盘事件或将整篇文章转换为图像等技术只会降低您的网站的可用性。

如果您的网站上有文字信息,即使您已经停止了我复制图像的所有其他方法,我也可以重新输入。如果你有一张图片并且你已经设法锁定了其他所有内容,我仍然可以进行屏幕抓取(更不用说我的浏览器将所有图片缓存在我机器上的一个临时文件夹中)。

你的内容偏执会影响到许多建立网站的人 - 但互联网背后的想法是它用于共享信息。

【讨论】:

  • 感谢您撰写此解释 :) 但无济于事 :(
【解决方案3】:

只需将以下代码添加到网页的 HEAD 标记中:

<script type="text/JavaScript">
//courtesy of BoogieJack.com
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】:

    默认情况下,Chrome 和 Firefox 会阻止禁用右键菜单。您必须在 Firefox 中手动编辑 about:config 中的条目以防止它被阻止,这不是您可以强制访问者执行的操作。

    关于 IE,你可以像这样修改你的 BODY 标签:

    <body onContextMenu="return false">
    

    这将阻止右键单击上下文菜单。

    除此之外,下一个最佳步骤是创建文本图像,将其放置在 .swf(flash)文档中,并指向页面以将 .swf 作为页面加载。这将导致所有浏览器在右键单击时显示 Flash 上下文菜单,并且会阻止简单的复制/粘贴操作。

    我确实同意之前的回复,无论使用何种方法,任何用户都可以简单地使用他们的 Print Screen 键,将图像粘贴到 Paint(或其他程序)中,保存它,然后使用 OCR 来获取您的文本。

    【讨论】:

    • 即使在 IE 上,这也只会禁用右键菜单,并且仅当用户启用被阻止的内容时。但是,用户仍然可以突出显示文本并按 Ctrl-C 进行复制。
    • @PauliL selection 具体很容易被屏蔽
    【解决方案5】:

    如果您在前端采用这些措施,则需要重新考虑您的策略。你试图做的事情本质上是错误的。

    作为您网页的访问者,拉这样的东西只会让我烦恼 - 我最终会弄清楚您做了什么并解决它。也就是说,我最近发现this particular method 如果您的目标是限制不耐烦或非技术用户,那么它会非常有效。谨慎行事...

    <div class="text">
      <p>Hello, world! Sadly, <a href="#">I won't work</a>.</p>
      <img alt="I can't be dragged or saved either :(" src="tree.png"> 
      <div class="preventSelect"></div>
    </div>
    

    ...和 ​​CSS:

    .text {
      position: relative;
      width: auto; /* can be fixed as well (ie 400px) */
      width: auto; /* can be fixed as well (ie 400px) */
      z-index: 0;
    }
    
    .preventSelect {
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      z-index: 1;
    }
    

    此方法的明显缺点是用户无法与我们 preventSelecting 的 div 内的任何内容进行交互。这包括链接、按钮、图像等。

    除非万不得已,否则请不要使用它。坦率地说,这对每个人来说都是一种痛苦。

    【讨论】:

      【解决方案6】:

      老实说,如果您不希望人们使用您网站上的任何信息,那么您就不能把它放在那里。如果您阻止他们复制和粘贴信息,他们仍然可以对其进行截图、输入并以这种方式保存数据。我知道这不是您要寻找的答案,但这只是需要考虑的问题。

      (我这样做是因为我还不能发表评论)。

      【讨论】:

      • 截图没问题!但是禁用复制粘贴有什么用!这就是我要找的...
      【解决方案7】:

      算了。无法在浏览器中阻止这些功能。您可以做的“最好的”是在图像或 Flash 电影中呈现您的数据 - 不可思议、缓慢、不切实际、实施起来很糟糕,而且使用 OCR 软件也可以规避。

      如果一切都失败了,用户只需进行屏幕截图或手动输入数据。

      如果您向用户展示数据,您将不得不忍受他们可以复制数据的可能性。故事结局。

      使用法律威胁来阻止您的内容,而不是技术手段。

      【讨论】:

      • 甚至可以很好地将图像发送到 ocr。除非整个页面最终看起来像一个验证码哈哈
      【解决方案8】:

      您永远无法禁用它。用户可以查看您页面的源代码,因此文本始终可用。如果你把点击处理程序禁用右键单击,他们可以关闭 javascript..

      你能做的最好的事情就是让人们不方便阻止他们,但你永远无法阻止他们。

      【讨论】:

        【解决方案9】:

        不可能保护网站免受复制。有一些技术使它变得更加困难,但是一旦用户在他的屏幕上看到信息就已经太迟了。例如,如果可以以某种方式禁用屏幕截图功能,他可以使用相机拍照。

        禁用 javascript 功能(例如快捷方式)并非在所有浏览器中都有效,用户可能会禁用 javascript。

        使用 curl 之类的程序可以抓取网页上的所有信息。

        您可以做的最好的事情是将您呈现的所有信息放入图像中。

        【讨论】:

        • 对,但是从动态页面创建图像的开销(+传输时间)是巨大的
        【解决方案10】:

        Lyrics.com 的开发人员所做的是将事件附加到 document.body.oncontextmenudocument.onselectstartdocument.body.onkeydown 以禁用浏览器将执行的操作。

        可以这么简单

        <body oncontextmenu="return false" onselectstart="return false"
              onkeydown="if ((arguments[0] || window.event).ctrlKey) return false">
        

        你需要这三个; oncontextmenu 基本上控制右键单击,onselectstart 涵盖了用鼠标拖动选择,以及 onkeydown Ctrl 键事件(例如按下 Ctrl+ACtrl+C复制整页)。

        但是我强烈建议你不要这样做。它会扼杀可用性,甚至让合法用户(例如设置了某些键映射的人,或者使用“后退”和“从上下文菜单中重新加载“),您必须担心的那些即使是最轻微的也不会受到阻碍。坦率地说,您的内容并不像您想象的那么特别,否则您不会通过网络浏览器将其提供给任何失败者。有价值的信息不会放到网上。

        如前所述,return false 的所有内容都是不可强制执行的。而且因为我发现这个页面特别令人恼火, 促使我弹出一个控制台并剖析他们所做的事情,并分离事件处理程序,这样我就可以复制我喜欢的任何内容,而他们甚至没有得到他们的宝贵点击跟踪数据。但实际上,任何人都需要做的就是禁用 JavaScript。

        阻止人们从互联网上复制文本的唯一方法是让其远离互联网。任何其他方式都注定要失败,因为您自己将副本交给他们,作为向他们提供副本的行为的一部分

        【讨论】:

          【解决方案11】:

          您可以使用以下代码停止复制粘贴

          <body ondragstart="return false" onselectstart="return false">
          

          【讨论】:

          • 请编辑您的答案以解释为什么这是一个如此出色的解决方案以及它如何解决问题。有什么限制吗?
          • 以上所有答案都不能完全解决问题,而我在这里提供问题的解决方案。
          • 我觉得这很难相信,但请添加说明为什么这可以解决问题。
          • 它有效。我在自己拥有的网页中尝试过。
          【解决方案12】:
          <script type="text/javascript">
          
          function md(e) 
          { 
            try { if (event.button==2||event.button==3) return false; }  
            catch (e) { if (e.which == 3) return false; } 
          }
          document.oncontextmenu = function() { return false; }
          document.ondragstart   = function() { return false; }
          document.onmousedown   = md;
          
          </script>
          <br />
          

          【讨论】:

          • 另外,我仍然可以在开发者控制台中输入document.body.innerText 或删除您的处理程序。即使开发控制台无法访问,我也可以去javascript:alert(document.body.innerText)
          【解决方案13】:

          尝试添加这个 css:

          #content {
              pointer-events: none;
          }
          

          这将停用鼠标操作,因此也可以复制粘贴。

          【讨论】:

            【解决方案14】:

            禁用剪切、复制和粘贴选项。

            <script language="text/javascript">
                // disable portal cut copy and paste options.
                $('body').bind('cut copy paste', function (e) {
                        e.preventDefault();
                });
            
            </script>
            

            但我更喜欢在 localhost 上启用此选项。

            <script language="text/javascript">
                // disable portal cut copy and paste options.
                $('body').bind('cut copy paste', function (e) {
            
                   // enable only localhost
                   if (location.hostname === "localhost" || location.hostname === "127.0.0.1") 
                    {
                        return;
                    }
                    e.preventDefault();
            
                });
            
            </script>
            

            【讨论】:

              【解决方案15】:

              请试试这个它对我有用...

               $('body').bind('cut copy paste',function(e) {
                      e.preventDefault(); return false; 
                 });
              

              【讨论】:

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

                【讨论】:

                  【解决方案17】:

                  我建议禁用右键单击。

                  <script language="text/javascript">
                      var message = "Not allowed."; 
                      function rtclickcheck(keyp){ 
                          if (navigator.appName == "Netscape" && keyp.which == 3){    
                              alert(message); return false; 
                          } 
                          if (navigator.appVersion.indexOf("MSIE") != -1 && event.button == 2) {
                              alert(message);     
                              return false;
                          }
                      } 
                      document.onmousedown = rtclickcheck;
                  </script>
                  

                  【讨论】:

                  • 该代码根本无法完成 OP 想要的。
                  猜你喜欢
                  • 2014-03-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-09-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-07-02
                  相关资源
                  最近更新 更多