今天,弄一個打印頁面的功能大體的原理想法是,ajax加載頁面到當前的一個隱藏iframe裏面,而後打印iframe,爲了兼容全部的瀏覽器,只好捨棄預覽功能,使用print()方法打印。但是試了好幾遍,每次打印都是空白啊。具體的代碼以下html
function XmlPostprint(){ var result=''; $.ajax({ url:"test222.html", success:function(data){ var doc=$("iframe#flyso")[0].contentWindow.document; doc.write(data); doc.close(); } }); } function prints() { XmlPostprint(); var ss=document.getElementById("flyso"); ss.contentWindow.close(); ss.contentWindow.focus(); ss.contentWindow.print(); }
以後無心中一次點擊了兩次打印按鈕,忽然發現居然又能夠打印了。才恍然大悟,jquery的ajax默認是異步加載的,也就是說prints()方法中的XmlPostprint()方法還沒有完成,就直接執行下面的js語句了。解決方法就是jquery的ajax添加上async:false的屬性,修改後的XmlPostprint()以下:
function XmlPostprint(){ var result=''; $.ajax({ url:"test222.html", async:false, success:function(data){ var doc=$("iframe#flyso")[0].contentWindow.document; doc.write(data); doc.close(); } }); }注:contentWindow是用於獲取iframe框架的window對象。本想用contentDocument,但此屬性兼容性很差。再者,很是感謝jquery插件printArea的做者,許多想法都看了插件的源代碼才實現,萬分感謝