我有一个网页(由JSF制作),其中一些链接允许用户获取PDF文件。
当用户点击这样的链接时,会显示一个等待的弹出窗口(它是一个模态面板)(因为PDF的生成可能很长),一旦创建了文件,IE就会显示“文件下载”提出“打开”,“保存”和“取消”选项的弹出窗口。
当这个弹出窗口关闭时,即当用户保存(或打开)PDF文件时,Javascript是否有办法从我的网页知道?
更准确一点,在显示PDF文件链接的网页中,会显示模式弹出窗口(“等待弹出窗口”),以使用户等待“文件下载”弹出窗口。问题是当用户保存(或打开)PDF文件时,“文件下载”弹出窗口关闭,但用户则“返回”原始网页,同时仍显示等待弹出窗口。
请注意,我的应用程序仅在IE6中运行,所以我并不反对只使用IE(6)的解决方案......
我对需要jQuery的解决方案也没有问题;)
修改 如果存在一个解决方案来捕获任何在向用户显示“文件下载”弹出窗口时触发的事件(即在用户选择保存,打开或取消之前),那么对我来说也没关系!
答案 0 :(得分:14)
我不得不在另一个项目上处理这类问题。我终于找到了一个智能解决方案,如另一个Stackoverflow question中所述。
以下帖子给出了解释:http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser
这个想法是“简单地”使用cookie来定义文件的下载时间。
答案 1 :(得分:10)
不存在此类事件。你需要采取不同的方法来解决这个问题。
target="myhiddeniframe"
)onload
属性设置为隐藏您的微调器的回调净效果:生成pdf时“旋转”,“文件下载”对话框出现时“取消固定”(与“文件下载”对话框关闭时相反)。
答案 2 :(得分:1)
我非常肯定答案是否定的,除非你想在浏览器中考虑某种ActiveX插件(在这种情况下答案可能仍然是否定的......)
答案 3 :(得分:1)
示例:
$('.generate_file_asynchronously').click(function(){
var url = $(this).attr('href');
show_loading_message();
$.get(url, function(file_url) {
hide_loading_message();
window.location.href = file_url;
});
return false;
});
答案 4 :(得分:0)
我在这里阅读的所有答案以及stackoverflow和其他地方的相关问题只解决了问题的第一部分,即服务器准备文件所需的时间。问题的第二部分,即文件在客户端上实际完成下载所需的时间,并非如此微不足道。
在我们的应用程序中,我们遵循以下方法。我们已经有了一个基于cometd的通知推送机制(你可以在这里阅读更多关于cometd的信息:What is Cometd ? Why it is used and how to work on that),但我想你也可以使用WebSockets或类似的东西。我们在后端使用Java,但它可以是任何东西。所以: