我已经构建了一个使用window.print()启用打印的页面。由于管理层有一些非常不寻常的要求,我需要能够捕获调用window.print()时出现的打印菜单的click事件。具体来说,在Chrome中,我需要捕获“打印”的点击事件。 (蓝色)和'取消' (灰色)按钮。
我不得不承认我甚至不知道从哪里开始。我检查了每个元素,可以看到这些是标准的html元素。这些按钮具有类别(打印默认用于打印按钮,取消用于取消按钮)但没有ID。
我还注意到在打印菜单之外没有可见的DOM,并且打印菜单html标签的ID为' print-preview'。
如何捕获打印菜单按钮的点击事件(至少在Chrome中)?
答案 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> </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; }
这将确保打印消息仅显示在打印页面上,而网页仅显示在在线页面上。