在页面到达window.print()之前执行函数

时间:2010-07-21 21:13:54

标签: javascript

我有一个调用window.print()的页面;在页面的底部。我无法访问window.print();它由服务器生成,我无法触摸它。基本上是因为IE我需要在打印对话框出现之前执行一些javascript,但是在页面加载之后。我不能这样做因为它一旦到达window.print();出现打印对话框。我仍然需要打印,但首先我需要运行myFunction()然后我可以使用window.print();

<html><head></head><body></body><!--no access from here--><script>window.print();</script></html>

4 个答案:

答案 0 :(得分:20)

你应该可以像这样覆盖它......

var _print = window.print;
window.print = function() {
  alert("Hi!");
  // do stuff
  _print();
}

答案 1 :(得分:9)

  

“基本上因为IE我需要......”

如果您只需要支持IE,请参阅onbeforeprint事件。

window.onbeforeprint = function () {
    // some code    
}

这样做的好处是代码不会在不支持 onbeforeprint 的浏览器中运行,这几乎是除了IE之外的所有浏览器。

答案 2 :(得分:0)

尝试将另一个<script>标记放在您无权访问的标记之前,例如:

<html><head></head><body></body><script>alert('Hello There !');</script><script>window.print();</script></html>

答案 3 :(得分:0)

此功能适用于包括IE在内的所有浏览器,无论打印方式如何:

/**
* Adds listeners for crossbrowser print callback
* @param callback - callback function
*/
function onPrint(callback) {
    window.matchMedia('print').addListener(query => query.matches ? callback() : null)
    window.addEventListener('beforeprint', () => callback())
}

onPrint(() => console.log('printing!'))

请注意,它可能会两次运行回调函数,具体取决于浏览器。可以使用临时标志来避免这种情况。