描述一下大概功能需求:从Ext的GridPanel中选择一条记录,将这条记录的详细信息呈现在Ext的Window当中,将Window中呈现的数据按其格式用打印机打印出来。 要处理这个有两种方式: var win = new Ext.Window({ title: '明细', width: 600, height: 400, buttons: [{ text: '打印', handler: function(){ //把当前的页面存起来 var c = window.document.body.innerHTML; //把win中要打印的内容赋给当前浏览器 window.document.body.innerHTML = win.body.dom.innerHTML; //开始打印 window.print(); //再转回去 window.document.body.innerHTML = c; } }] }); 先不说打印是否成功,由于整个项目是Ext做的,这样一来回折腾,整个页面直接变成只能看不能操作了,晕倒~再想办法吧。 var win = window.open('','printer', ''); win.document.body.innerHTML = win.body.dom.innerHTML; win.print(); 没问题,可是弹出来了一个窗口,我想能不能把它隐藏起来呢,可是突然又想到弹窗会被某些浏览器拦截,这个方法也放弃。 var win = new Ext.Window({ title: '明细', width: 600, height: 400, html: '<iframe />', buttons: [{ text: '打印', handler: function(){ var c = win.body.first().dom.innerHTML; var printer = win.body.last().dom.contentWindow; printer.document.body.innerHTML = c; printer.print(); } }] }); 在Ext.Window中用html配置选项创建一个空iframe标签,在Firebug下可以看到html所配置的内容会出现在win.body中且位于最后,win.body是Ext.Element对象,通过它可以取到要打印的内容c和打印机printer(frame中的window),然后赋值,接着打印。 |
|