如何在Javascript window.print()调用的默认打印菜单上捕获click事件?

时间:2015-08-12 16:32:37

标签: google-chrome javascript-events

我已经构建了一个使用window.print()启用打印的页面。由于管理层有一些非常不寻常的要求,我需要能够捕获调用window.print()时出现的打印菜单的click事件。具体来说,在Chrome中,我需要捕获“打印”的点击事件。 (蓝色)和'取消' (灰色)按钮。

我不得不承认我甚至不知道从哪里开始。我检查了每个元素,可以看到这些是标准的html元素。这些按钮具有类别(打印默认用于打印按钮,取消用于取消按钮)但没有ID。

我还注意到在打印菜单之外没有可见的DOM,并且打印菜单html标签的ID为' print-preview'。

如何捕获打印菜单按钮的点击事件(至少在Chrome中)?

2 个答案:

答案 0 :(得分:6)

您无法直接从常规网页访问Chrome的内部窗口(本例中为打印对话框)。

要确定打开或关闭打印对话框,您可以捕获matchMedia事件(仅限webkit):

var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener(function(mql) {
    if (mql.matches) {
        console.log('before print dialog open');
    } else {
        console.log('after print dialog closed');
    }
});

但是您无法检查是否单击了“打印”或“取消”按钮。无法从常规网页访问此信息。

要获取有关Chrome打印机作业的信息,您只能为Chrome创建扩展程序并在内容脚本中收听onPrintRequested event。当然扩展必须安装到每个页面用户的浏览器中。

答案 1 :(得分:3)

您是否尝试在网页中阻止打印,如果是,请按照以下链接进行操作。

http://webdesign.about.com/od/advancedcss/qt/block_print.htm

    

使用CSS很容易阻止人们打印您的网页。您只需要创建一个名为print.css的1行样式表,其中包含:

body { display: none; }

然后将该样式表作为打印样式表加载:

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

重要部分用粗体表示 - 这是一个打印样式表。它告诉浏览器如果将此网页设置为打印,请切换正文以显示任何内容。

                 然后,所有打印的将是浏览器附加到打印页面的标准页眉和/或页脚。

一次阻止一页

如果你不&# 39;需要阻止您网站上的大量网页,您可以逐页阻止打印,并将以下格式粘贴到HTML标题中:

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

使用已阻止的页面获取更多信息

但是,如果您想阻止打印,但又不想让您的客户感到沮丧,该怎么办?您可以获得一点点发烧友并输入一条消息,该消息仅在您的读者打印页面时显示 - 替换其他内容。要做到这一点,请构建标准网页,并在页面顶部,正文标签后面,放置:

<div id="noprint">

并在写完所有内容后关闭该标记,在页面的最底部:

</div>

然后,在您关闭&#34; noprint&#34; div,打开另一个div,显示打印文档时要显示的消息:

<div id="print"> <p>This page is intended to be viewed online and may not be printed. Please view this page at http://webdesign.about.com/od/advancedcss/qt/block_print.htm</p&gt; </div>

        

包含指向print.css的打印CSS文档的链接:

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

在该文档中包含以下样式:

#noprint { display: none; }
 #print { display: block; }

最后,在您的标准样式表(或文档头中的内部样式)中,写下:

                
#print { display: none; }
 #noprint { display: block; }

这将确保打印消息仅显示在打印页面上,而网页仅显示在在线页面上。