如何恢复覆盖的javascript打印方法
我以前的同事重写window.print方法:如何恢复覆盖的javascript打印方法,javascript,Javascript,我以前的同事重写window.print方法: function print(data){ var window_print = window.open('', 'my div', 'height=768, width=1024'); window_print.document.write('<!DOCTYPE html><html><head><title>Печать</title></head>&l
function print(data){
var window_print = window.open('', 'my div', 'height=768, width=1024');
window_print.document.write('<!DOCTYPE html><html><head><title>Печать</title></head><body>' + data + '</body></html>');
window_print.print();
window_print.close();
}
功能打印(数据){
var window_print=window.open(“”,'my div','height=768,width=1024');
窗口打印文件写入(“Пчаааа”+数据+”;
window_print.print();
window_print.close();
}
我的意图是使用该函数的默认行为:只打印当前页面,并添加:
if(data){….}else{window.print()}
当然,我收到了错误:“太多的递归:window.print();”
我的问题是如何调用默认的行为窗口.print()?Edit:好的,在某些浏览器中,
print
似乎是window
的自有属性,而在其他浏览器中则不是。因此,只需缓存窗口的值。打印:
var printWindow = window.print;
// define your new print function here
var print = function(data) { ... };
// then later:
printWindow.call(window);
注意:如果您在全局范围内执行所有这些操作,那么您需要使用函数表达式(var print=…
)而不是函数声明(function print(data){…}
)来定义新的print
,因为函数声明会被提升到其范围的顶部,因此,打印
重新定义将在您有机会缓存它之前发生。如果您没有在全局范围内执行此操作,那么这并不重要,因为新的打印
不会覆盖窗口。无论如何定义打印
原件:
尝试:
print
似乎不是window
的自有属性,这意味着新定义的print
只是在原型链的后面隐藏了一些东西。通过使用Object.getPrototypeOf
向上移动原型链,可以绕过此阴影
您还需要使用调用
,以便打印
方法为此
接收正确的值。您需要在定义自己的打印()之前,将原始打印方法作为另一个属性存储在窗口中
EDIT:您还需要将新的print
函数具体定义为window.print=function(){…}
而不是function print(){…}
,以便能够访问原始文件-请参阅带有精美链接和链接的答案。这不会对调用方法的方式产生任何影响
window.originalPrint=window.print;
window.print=函数(数据)
{
如果(数据)
{
document.getElementById('foo').innerHTML=data;
}
其他的
{
window.originalPrint();
}
}
打印('你好')
print()
@yonishepelev啊,它看起来像是print
是firefox
中窗口的一个自有属性。看起来您必须先缓存print
的值,然后再定义新值,并使用缓存的引用。@BYossarian遗憾的是,您的编辑与我的原始答案相同。非常感谢@BYossarian占用您的时间。好的,我了解了发生的情况,自己也学到了一些东西:)并更新了我的答案
Object.getPrototypeOf(window).print.call(window);