打印页面时执行JavaScript

8

在打印页面时,JavaScript 代码似乎会被执行。
我该如何确定当前是否正在打印页面?我进行了一些 JS 调整大小,并且需要稍微处理一下打印。

2个回答

9

除了IE浏览器以外,其他浏览器都没有before print事件。但是你可以针对打印时使用的样式表进行特定的目标设置:

<!-- In head -->
<link rel="stylesheet" type="text/css" media="print" href="print.css" />

这个样式表将在打印之前应用。这使您可以进行一些惊人的更改,包括隐藏主要部分,移动项目并执行仅针对打印的样式,如分页。

另一个选择是提供用户一个“打印此页面”按钮。该按钮可以处理您的JavaScript,调用window.print()并撤消更改:

function printMe() {
    // perform changes
    window.print();
    // revert changes
}
window.print() 方法在所有我测试过的浏览器中都会阻塞,因此可以安全地在之后立即恢复更改。但是,如果用户通过菜单或工具栏选择打印,则无法控制。在一个复杂的 web 应用程序中,我处理这种情况的一种方法是使用一个打印样式表,隐藏除一个特殊 DIV 外的所有内容。如果用户点击打印,则会显示警告消息。如果他们点击打印按钮,那么该 div 将被填充正确的信息。这不是很好,但至少他们没有得到几页垃圾。

3
据我所知,目前没有一般的可能性。IE拥有onbeforeprint和onafterprint,这些事件现在也被添加到Firefox 5/6+中(我不确定)。建议考虑使用打印特定的样式表。
<link rel="stylesheet" href="print.css" type="text/css" media="print" /> 

其他相关问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接