Window.onbeforeprint和Window.onafterprint同时被触发

use*_*157 5 html javascript events javascript-events

我已经定义了onbeforeprint并修改了我的html代码,现在一旦完成选择打印按钮上的打印后,我便希望触发onafterprint,但事实并非如此。

相反,当我按下Control + Print按钮时,先触发onb​​eforeprint,然后显示onafterprint事件,然后显示打印对话框。

单击“打印”按钮后,我有什么办法可以对HTML进行更改?

我使用IE浏览器-9和代码如下 代码

<script type="text/javascript">
    window.onbeforeprint = function () {
        alert('Hello');
    }
    window.onafterprint = function () {
        alert('Bye');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

谢谢与问候,弗朗西斯·P。

kir*_*oid 3

onbeforeprint在对话框出现之前触发并允许更改 html 等。

onafterprint在对话框出现之前触发。甚至无法知道文档是实际打印的还是用户取消的。不用说打印何时完成(如果开始的话)。

再次强调:没有事件可用于跟踪打印对话框中发生的任何事情,即您的问题的答案是否定的

此外,我希望您的需求永远不会被实现,因为这会让用户感到沮丧。他/她要求打印一份文档,但得到的内容有所不同。

  • 我不同意你最后的评论。有时页面上会有无用的html用于打印。例如,假设我有一个充满表格、侧面导航菜单和一些按钮的页面。显然,当用户打印此页面时,他们正在尝试打印这些表格。更进一步,假设您有一些由 JavaScript 控制的 DOM 元素,您希望在打印期间显示它们。如果用户不需要全部,他们可以选择要打印的页面,但这可以让他们不必通过单击按钮或与之关联的任何内容来浏览和显示每个元素。 (3认同)
  • 在我看来,Firefox (88) 和 Chrome (90 smth) 有完全不同的行为:Chrome 将在取消/打印后触发“afterprint”,而 Firefox 将在对话框打开后调用它。根据文档(https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onafterprint),Chrome 是正确的。 (2认同)