【问题标题】:Is it possible to show an alert when the user tells the browser to print a page?当用户告诉浏览器打印页面时是否可以显示警报?
【发布时间】:2013-11-29 01:44:15
【问题描述】:

客户需要在尝试从浏览器打印(通过 Ctrl+P 或文件/打印)任何内容时向用户显示警报,例如“记住不要打印超过 x 页”或类似的内容那。是否有可能,使用 Javascript、CSS 或任何其他方法?

【问题讨论】:

    标签: javascript internet-explorer firefox


    【解决方案1】:

    很遗憾,没有。您可以从 JavaScript 调用打印对话框,但不能拦截它。 唯一的方法是仅在 Internet Explorer 上使用 ActiveX,这简直是丑陋的。

    【讨论】:

      【解决方案2】:

      这是不可能的。一种解决方法可能是在没有菜单的单独窗口中打开相关页面。所以用户不能直接点击文件->打印。如果你想确保你也可以捕获鼠标右键并阻止上下文菜单打开。

      然后,您将在 javascript 中包含一个“打印页面”链接,包括您的警报。

      不是很优雅 - 我知道。

      【讨论】:

      • Control-P 仍然可以使用。
      • 没错,但应该可以在 keydown 处理程序$(document).keydown(...) 中拦截它
      【解决方案3】:

      window.onbeforeprint/window.matchMedia 有一个解决方案

      function beforePrint() {
          alert('Remember print only X copies');
      }
      function afterPrint() {
          //do something
      }
      
      if (window.matchMedia) {
          var mediaQueryList = window.matchMedia('print');
          mediaQueryList.addListener(function(mql) {
              if (mql.matches) {
                  beforePrint();
              } else {
                  afterPrint();
              }
          });
      }
      
      window.onbeforeprint = beforePrint;
      window.onafterprint = afterPrint;
      

      http://jsfiddle.net/mowglisanu/FY4q2/

      Detecting Print Requests with JavaScript

      由于某种原因 beforeprint 在 Chrome 中触发了两次。

      【讨论】:

        【解决方案4】:

        但是你可以使用 css 来停止打印

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

        【讨论】:

        • 这显然禁止打印页面,不是吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 2016-03-25
        • 2019-12-24
        • 2014-07-25
        • 2010-10-02
        相关资源
        最近更新 更多