我正在尝试更新我的页面内容以供打印。我想为每个输入元素(文本框、列表等)添加标签(跨度),以防止打印时文本被 chop 。我想在打印之前确保所有这些标签都反射(reflect)了用户从各自的输入字段中输入的最新值。
我的第一个想法是在每个文本框后面放一个标签,并在页面渲染时将其绑定(bind)到相同的值,然后根据 CSS 媒体属性隐藏/显示输入或标签。但是我还需要为每个输入元素设置 onchange
处理程序,以便在每次更改其值时更新其各自的标签。
我的下一个想法是使用 onbeforeprint
和一些 jQuery 在一个地方使用当前值动态更新标签。更干净、集中、更简洁的代码。
但据我所知,onbeforeprint
和 onafterprint
仅在 IE 和 Firefox 中受支持。 ... 但是 ... 我能找到的关于浏览器对这两个功能的支持的每篇文章或帖子都来自 4 或 5 年,甚至更早!
所以我想知道,在过去的 5 年中,Chrome 和 Safari 是否在任何时候添加了对这两个功能的支持?
最佳答案
虽然上述答案很好地回答了直接问题,但省略了以下基本信息:
虽然特定的 onbeforeprint
和 onafterprint
事件没有得到普遍支持,但概念事件有功能支持 - 可以在前后执行代码在大多数现代浏览器中打印。
有关详细信息,请参见此处:http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/
总结:
存在一个 window.watchMedia API,它允许您 Hook CSS 媒体查询的转换事件,包括 'print'
媒体查询。这使您可以 Hook 打印页面之前和之后立即发生的事件。
此 API 得到了 Chrome 和 Webkit 的良好支持,onbeforeprint
和 onafterprint
事件在 IE 和 Firefox 中得到了很好的支持,为您提供了很好的覆盖范围。
关于javascript - 现代浏览器是否支持 onbeforeprint/onafterprint HTML 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22969552/