【发布时间】:2013-11-29 01:44:15
【问题描述】:
客户需要在尝试从浏览器打印(通过 Ctrl+P 或文件/打印)任何内容时向用户显示警报,例如“记住不要打印超过 x 页”或类似的内容那。是否有可能,使用 Javascript、CSS 或任何其他方法?
【问题讨论】:
标签: javascript internet-explorer firefox
客户需要在尝试从浏览器打印(通过 Ctrl+P 或文件/打印)任何内容时向用户显示警报,例如“记住不要打印超过 x 页”或类似的内容那。是否有可能,使用 Javascript、CSS 或任何其他方法?
【问题讨论】:
标签: javascript internet-explorer firefox
很遗憾,没有。您可以从 JavaScript 调用打印对话框,但不能拦截它。 唯一的方法是仅在 Internet Explorer 上使用 ActiveX,这简直是丑陋的。
【讨论】:
这是不可能的。一种解决方法可能是在没有菜单的单独窗口中打开相关页面。所以用户不能直接点击文件->打印。如果你想确保你也可以捕获鼠标右键并阻止上下文菜单打开。
然后,您将在 javascript 中包含一个“打印页面”链接,包括您的警报。
不是很优雅 - 我知道。
【讨论】:
$(document).keydown(...) 中拦截它
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 中触发了两次。
【讨论】:
但是你可以使用 css 来停止打印
<style type="text/css" media="print">
body{visibility:hidden;} or use display:none;
</style>
【讨论】: