今天,弄一个打印页面的功能大体的原理想法是,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的做者,许多想法都看了插件的源代码才实现,万分感谢