Joe*_*Joe 27 javascript browser printing
当用户打印页面时是否可以触发javascript事件?当用户选择打印页面时,我想删除对javascript库的依赖,因为该库非常适合屏幕但不适合打印.
知道怎么做到这一点?
Aej*_*jay 32
对于任何绊倒谷歌这个答案的人,让我试着清理一下:
正如Ajay指出的那样,有两个事件被打印用于打印,但它们没有得到很好的支持; 据我所知,它们仅在Internet Explorer和Firefox(6+)浏览器中受支持.那些事件是window.onbeforeprint和window.onafterprint,它们(如你所料)将在打印作业之前和之后触发.
但是,正如Joe的链接(/sf/answers/694454911/)所指出的那样,并不是所有情况下的实现方式.在大多数情况下,两个事件都在对话之前触发; 在其他情况下,脚本执行可能会在打印对话框中暂停,因此两个事件可能同时触发(在对话框完成后).
有关这两个事件的更多信息(和浏览器支持):
https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeprint
https://developer.mozilla.org/en-US/docs/DOM/window.onafterprint
简短的回答:如果您希望干扰打印流程,请不要.如果你希望在打印后触发代码,它就不会像你想要的那样工作; 期望糟糕的浏览器支持,并尝试优雅地降级.
Dan*_* K. 13
它可以通过覆盖来完成,例如window.onbeforeprint.
使用Chrome,我发现更多的奥术window.matchMedia("print").addListener(function() {alert("Print Dialog open.")})也有效.
可以使用这个有争议的特征来阻止用户打印页面.
我第一次在Scribd上遇到过它.在那里,如果使用菜单命令打开打印对话框,页面内容将显示为灰色,并显示警告弹出消息,说明无法打印页面的原因.(注意完整分析:在该页面上,control-p也被覆盖,因此您根本无法使用它来打开打印对话框.此外,还有一个用于打印机输出的@media CSS隐藏内容;所有在Firefox上测试).