要處理這個有兩種方式:
1.在前臺用JavaScript調(diào)用打印機打印
2.在后臺服務(wù)器端處理
由于需求的原因,這里只允許使用第一種方式。想來應(yīng)該也不難,JavaScript調(diào)用一下window.print()(注意:不是Ext.Window),結(jié)果失敗了。window.print()打印出來的是整個當(dāng)前瀏覽器中所呈現(xiàn)的內(nèi)容,而不是我所要的Ext.Window中的內(nèi)容。
(突然在想為什么不讓每個dom都有print()方法去打印自身中的內(nèi)容呢?郁悶…)
既然只能打印瀏覽器window中的,那我把Ext.Window中要打印的內(nèi)容賦給瀏覽器的window,不就可以打印了么。
于是乎開始coding…
var win = new Ext.Window({ title: '明細', width: 600, height: 400, buttons: [{ text: '打印', handler: function(){ //把當(dāng)前的頁面存起來 var c = window.document.body.innerHTML; //把win中要打印的內(nèi)容賦給當(dāng)前瀏覽器 window.document.body.innerHTML = win.body.dom.innerHTML; //開始打印 window.print(); //再轉(zhuǎn)回去 window.document.body.innerHTML = c; } }]});
先不說打印是否成功,由于整個項目是Ext做的,這樣一來回折騰,整個頁面直接變成只能看不能操作了,暈倒~再想辦法吧。
coding…
var win = window.open('','printer', '');win.document.body.innerHTML = win.body.dom.innerHTML;win.print();
沒問題,可是彈出來了一個窗口,我想能不能把它隱藏起來呢,可是突然又想到彈窗會被某些瀏覽器攔截,這個方法也放棄。
還有什么辦法呢?再次突然想起frame與frame之間如何用JavaScript傳值,一個frame中含有一個window對象,那么…
接著coding…
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配置選項創(chuàng)建一個空iframe標(biāo)簽,在Firebug下可以看到html所配置的內(nèi)容會出現(xiàn)在win.body中且位于最后,win.body是Ext.Element對象,通過它可以取到要打印的內(nèi)容c和打印機printer(frame中的window),然后賦值,接著打印。
想的好好的,打印出來的竟然和第一個方式一樣,⊙﹏⊙b汗
問題出在哪了?難道因為iframe沒有獲得焦點?printer.print()之前加上printer.focus(),再打印一張出來,搞定!同理也可以打印Ext.Panel等。
聯(lián)系客服