需求背景:
大数据量得报表在导出时,会有一段很长的等待时间,这个时间内,如果能有人性化提示,能使项目增色不少。
实现方法:
导出可以分为三步,第一步点击导出按钮,弹出导出excel设置窗口进行设置;第二部为点击确定运算报表;第三步为点击浏览器下载。
当点击确定以后,会在网页里面一个叫“报表名_saveAs_frame”的iframe中,请求负责报表导出的servlet,当服务器导出完成时,会将其整个发往客户端浏览器,这个时候iframe的状态会发生变化的,通过js监听这个iframe解决。
具体步骤:
1. 定义一个div,用于展示提示信息
<div id="show"name="show" style="position:absolute!important;left:30%;top:100px;z-index:3;border:0px solid #ff6600;margin:100pxauto;padding:0px;display:none;width:400px;height:300px;text-align:center;">
<div>
<img src="../images/loading.gif" />
</div>
<div>
<font color='black' size="2">页面导出中,请稍候...</font>
</div>
</div>
2. 定义js
function g(id){
return document.getElementById(id);
}
// 显示等待
function showWaiting() {
document.getElementById("show").style.display="block";
}
// 重写report1_saveAsExcel2函数
var saveFunc = report1_saveAsExcel2;
var report1_saveAsExcel2 = function(retValue){
showWaiting();
saveFunc(retValue);
}
// 监视iframe状态
var f = g('report1_saveAs_frame');
f.onreadystatechange = function(){
if(this.readyState == 'loading') {
document.getElementById("show").style.display="none";
}
};
注意事项:
只有IE内核才支持iframe的readyState事件,故,类似360浏览器,遨游,IE等起作用,frifox等浏览器监听不到。