Epa*_*aga 15 java gwt asynchronous download
单击按钮时,我的GWT应用程序返回嵌入在HTML页面中的PDF文件,其内容如下所示:
<html><head></head>
<body marginwidth="0" marginheight="0" bgcolor="rgb(38,38,38)">
<embed width="100%" height="100%" name="plugin"
src="http://myserver/?cmd=getMyPdf" type="application/pdf">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
问题是服务器创建这个PDF文件需要一段时间,所以我想要的是一个带有加载动画的等待屏幕,可以在后台下载PDF文件,然后当文件完成后,显示页面如上所述.
一种显而易见的方法是显示加载页面,向服务器发送异步命令,然后一旦调用onSucceed方法,就像正常一样调用页面.下行是我必须添加一些服务器端逻辑,以使PDF创建在后台工作...
有没有办法用GWT API做客户端?
您是否看到此stackoverflow问题 检测到浏览器何时收到文件下载?基本上给出的答案是您在返回响应中设置cookie并在客户端等待设置此cookie.这可以通过GWT轻松完成,因为它有一个Scheduler(用于重复计时器检查)并可以轻松访问Cookies.您仍需要进行一些服务器更改,但不必创建后台进程.
我没有完整的答案,但以下代码在Safari中适用于我,也许你可以修改它,使它也可以与其他浏览器一起使用(?):
<html><head>
<script type="text/javascript">
function showPdf() {
document.getElementById("loading").style.visibility = "hidden";
document.getElementById("pdf").style.visibility = "visible";
}
</script>
</head>
<body marginwidth="0" marginheight="0" bgcolor="rgb(38,38,38)">
<div id="loading"
style="position: absolute; background-color: white;">Loading...</div>
<iframe id="pdf" width="100%" height="100%" name="plugin"
src="http://myserver/?cmd=getMyPdf" onload="javascript:showPdf();"
style="visibility: hidden;"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是纯JavaScript - 但也可以用GWT完成.请注意,我使用的是iframe而不是embed,因为embed并不真正支持onload方法(并且embed不是标准的HTML元素,据我记得).
为什么这可能不是完整答案的原因是Chrome在PDF开始下载后立即触发onload事件(但在服务器端生成PDF之后).我不确定,如果这是你想要的?
| 归档时间: |
|
| 查看次数: |
3334 次 |
| 最近记录: |