【问题标题】:How to stop user from printing webpages? using javascript or jquery如何阻止用户打印网页?使用 javascript 或 jquery
【发布时间】:2011-07-11 08:10:17
【问题描述】:

我们如何阻止用户使用不同的方法打印网页?

  1. 禁用右键单击
  2. 禁用 CtrlP 组合键
  3. 右击->打印

有没有办法停止打印网页?

我们可以使用 javascript 处理这 3 个事件吗? 或者我们可以说。如果用户将执行任何这些事件。然后我想运行我的其他代码。这可能吗?

【问题讨论】:

  • 真的想听听这个请求的理由。
  • @roXon 好的,我收回所有的恶作剧。大业! :D
  • @Gourav 你忘记了文件 > 打印。
  • 仅供参考,有许多 printscreen 程序可以轻松截取整页然后打印出来。 @roXon 呵呵.. +1
  • @roxon,在用户机器上下载间谍软件/病毒并烧毁硬盘。没有可打印的内容。

标签: javascript jquery css


【解决方案1】:

如前所述,您不能这样做。但是,一个常用的技巧是尝试隐藏所有正在打印的页面内容:

<style type="text/css" media="print">
    body { visibility: hidden; display: none }
</style>

但这不保证能正常工作,如果你对自己在做什么有一个模糊的概念,也很容易解决。

【讨论】:

  • 这仅在尝试使用浏览器的打印功能进行打印之前有效。 Fireshot之类的工具可以将页面捕获为图像,并且可以毫无问题地打印
  • @Kangkan - 非常正确。正如在其他各种答案中提到的那样,这个问题没有没有解决方案。我的回答中使用的方法只会推迟那些不需要打印页面的人。如果您不顾一切地打印它,总有办法。
  • 我觉得这个问题正在逐渐远离相关问题。这个问题只是停止印刷的绝望尝试。这种绝望的理由现在应该出来了。
【解决方案2】:

用户机器上的网页不受您的控制。用户可以做他或她想做的任何事情,但是您可以提供 PDF 并禁用打印该 PDF。不过,如果我必须打印一些东西,我会找到一种方法来打印它。

【讨论】:

  • 即使带有 PDF 禁止打印标志,也仅适用于兼容的 PDF 阅读器。一个足够老练的用户无论如何都不会遇到任何问题。
  • +1 yeeeah 我喜欢疯狂的麦克斯部分'...用户的机器无法控制。'
  • 这是为了让诚实的用户保持诚实。就我而言,我们要求我们的用户不要打印。他们可能会忘记或错过信息。因此,我们只需要阻止“正常”的打印尝试。预计他们不会特意绕过基本的预防措施。
  • 我注意到,每当用户询问 SO 如何防止人们复制他们的内容(块复制/粘贴、块打印)时,都会有回答说明您总能找到禁用的方法阻止复制的系统。但是 99% 的网站用户(以及 100% 的我的用户)的技术水平不够高,无法使用开发工具禁用阻止打印页面的样式标签。你必须明白,阻止大多数用户访问托管昂贵内容的付费墙网站对某些人(比如我)来说非常重要,否则我的用户分享给他们的朋友,我们就完蛋了。
  • 请检查 James Allardice 的回答(链接如下)...确实,开发人员工具仍然允许您打印它,但并不是每个人都能做到这一点。 stackoverflow.com/questions/6647392/…
【解决方案3】:

我知道这个问题很久以前就有人问过并回答过,但我遇到了它,觉得我应该投入我的 2 美分。我有一个程序,其中包含一些版权信息,我们希望结尾用户无法打印此信息,所以我所做的是创建一个单独的 div,我将其提供给 .printable 类。

我将这些行添加到 CSS 表中

.printable { display:none; }
@media only print {
    .container { display:none !important; } <-- This is the wrapper container for all of the site data
    .printable { display:block !important; } <-- This is my added printable container with a message about not printing the page
}

随着主要浏览器中新 CSS 引擎的改进,即使他们执行右键单击 + 打印,它也会显示 .printable 框而不是内容。

但是,有人指出,如果用户真的想要,没有办法阻止用户使用屏幕捕获软件来打印信息。我们认为,如果不鼓励打印,我们将阻止大约 99% 的人,否则他们可能会打印这些信息。

这是我的 2 美分...希望它可以帮助某人

【讨论】:

    【解决方案4】:

    你不能。别再浪费时间了。

    一旦用户将您网站的数据下载到他的计算机上,您就无法再控制它了。如果您不希望用户随心所欲地使用它,不要把它放在公共网络上。

    【讨论】:

      【解决方案5】:

      在你的 CSS 中添加这样的块

      @media print {
        body {
          display: none;
        }
      }
      

      这应该在打印时隐藏所有内容。

      【讨论】:

      • 这仅在尝试使用浏览器的打印功能进行打印之前有效。 Fireshot 之类的工具可以将页面捕获为图像,并且可以毫无问题地打印。
      • 当然你不能保护这种情况。用户还可以使用您熟悉的相机捕捉屏幕。
      • 这可以通过浏览器检查来改变
      【解决方案6】:

      没有可靠的方法来做到这一点。您可以拦截某些按键等并使用脚本取消它们,但是当用户禁用脚本时,就没有预防措施了。此外,打印功能内置于实际浏览器本身中,您实际上无法阻止这一点。

      即使是 Aviary 等浏览器插件也会抓取浏览器的屏幕截图并将其复制到内存中,因此您无法阻止这种情况发生。然后,用户可以从 photoshop 或paint .net 等进行打印。

      我建议您尝试的唯一方法是您可以包含仅 print.css 样式表。在该样式表中,您可能希望尝试将任何敏感内容设置为 display:none。但是,即使这样也不能保证,因为用户可以简单地禁用样式表。

      【讨论】:

        【解决方案7】:

        我不会违背用户的期望。不要更改默认行为。

        【讨论】:

        • 我们可以使用javascript处理这3个事件吗?或者我们可以说。如果用户将执行任何这些事件。然后我想运行我的其他代码。这可能吗?
        【解决方案8】:

        我试过这种方式的克里斯

        @media only print {
        .container { display:none !important; }
        }
        

        这是工作。 但是当我按F12打开开发者工具时,找到“.container { display:none !important; }”这一行删除它,然后按ctrl + p,所有的东西都会重新显示在打印窗口上。 可能没有 100% 防止打印网页内容的解决方案。

        【讨论】:

          【解决方案9】:

          无法阻止网络用户打印您的网页。但是是的,您可以设置打印处理后要打印的内容。我的意思是简单地编写如下代码:

          <!DOCTYPE html>
          <html>
              <body onbeforeprint="abortPrint()">
                  <p>This is my Content</p>
          
                  <script>    
                      function abortPrint()
                      {
                          alert("Printing is not allowed");
                          document.write();
                      }
                  </script>
                  
              </body>
          </html>
          

          这只会打印空白页,您的内容不会被打印。但这只有借助此方法才能阻止用户打印页面。

          我们总是感谢您提出回答的建议。

          【讨论】:

          • 在 Firefox 上测试过,但没有用,请您检查一下吗?我不得不把它改成 window.onbeforeprint = () => document.write("print is nt allowed");
          • @phoenixstudio 是的,你是对的。我的答案仅适用于 html 正文,但您的答案涵盖了所有窗口。
          【解决方案10】:

          如果你在用户的浏览器上渲染一些东西,它就会在用户的控制之下。你无法抗拒用户打印。

          如果您希望向用户显示某些信息,并且不希望用户能够打印,您可以使用 PDF 之类的东西并保护它不被打印。

          你的用途是什么?

          【讨论】:

            【解决方案11】:

            是的,你可以用 JavaScript 做到这一点 此脚本将禁用用户可以从控制台打印或右键单击或 ctrl+p 打印的所有内容 并将其与 css @media print{body{display:none;}} 一起使用 为了额外的安全。

            在右键单击时禁用上下文菜单,

            $("body").on("contextmenu", function (e)  
               {  
                  return false;  
               });  
            }); 
            //Or,
            document.oncontextmenu = function() {
               return false;
            }
            //Disable right-click menu on a particular section on the page,
            $(document).ready(function(){  
               $("#youDivSectionId").bind("contextmenu", function(e) {  
                  return false;  
               });  
            }); 
            //Disable Cut, copy, paste,
            $(document).ready(function(){
               $('body').bind('cut copy paste', function (e)
               {
                  e.preventDefault();
               });
            });
            //Let's Block the same cut, copy, paste events with javascript codes,
            $(document).ready(function(){  
            $(document).keydown(function(event) {  
               //event.ctrlKey = check ctrl key is press or not  
               //event.which = check for F7  
               // event.which =check for v key  
               if (event.ctrlKey==true && (event.which == '118' || event.which == '86')) {  
                  event.preventDefault();  
                  }  
               });  
            }); 
            //Prevent browser Debugger console example,
            $(document).keydown(function (event) {
            // Prevent F12 -
            if (event.keyCode == 123) {
               return false;
            }
            // Prevent Ctrl+a = disable select all
            // Prevent Ctrl+u = disable view page source
            // Prevent Ctrl+s = disable save
            if (event.ctrlKey && (event.keyCode === 85 || event.keyCode === 83 || event.keyCode ===65 )) {
               return false;
            }
            // Prevent Ctrl+Shift+I = disabled debugger console using keys open
            else if (event.ctrlKey && event.shiftKey && event.keyCode === 73)
            {
               return false;
            }
            //print disable by ctrl+p
            else if(event.ctrlKey && event.keyCode===80){
             return false;
              }
            });
            

            使用 Javascript 代码,您可以阻止浏览器的任何事件。

            【讨论】:

            • 请修复您的 cmets。这样的代码既不可读也不可运行。
            • 现在检查我认为现在可以的代码
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-09
            • 2013-04-30
            • 2012-01-13
            • 1970-01-01
            • 2014-02-12
            • 1970-01-01
            相关资源
            最近更新 更多