有没有办法在JavaScript中检测下载的开始?

时间:2009-01-07 14:08:02

标签: javascript html iframe download

在我们当前的项目中,我们提供的PDF下载可由用户通过他提交的HTML表单进行自定义。动态生成PDF需要几秒钟,我想将其可视化,例如通过禁用提交按钮直到下载开始。不幸的是,我找不到一种方法来检测下载何时开始*。所以我不知道何时重新启用提交按钮。

我已经尝试将IFrame指定为HTML表单的目标,希望触发onload事件。但是,它不是 - 可能是因为PDF是使用“Content-disposition: attachment”标头发送的,并且它实际上并没有加载到IFrame中。

我现在能想到的唯一解决方案是将PDF生成到服务器上的临时文件,我想避免使用。

*)让我澄清一下:我不需要知道下载是否已完成,或者即使它已经真正开始。我想检测浏览器询问用户是打开还是保存文件的点。我猜这种情况发生在浏览器收到HTTP标头时。

3 个答案:

答案 0 :(得分:4)

如果我是你,我会用信息对服务器进行AJAX调用,生成文件,然后将文件名/ id /返回给javascript,然后使window.location像download.php一样? id = x(但文件已经生成,因此只需设置标题并将其读出),此时您可以重新启用提交。

答案 1 :(得分:2)

您想要的是能够检测下载文件的大小何时从0变为正值。据我所知,使用javascript无法做到这一点 - 你需要一个可以访问客户端文件系统的插件。

建议的解决方法:每次下载创建一个会话。让客户端轮询服务器有关下载状态的信息。这可能是“不存在”,“未开始”,“已开始”,“已完成”。您需要一些服务器端的工作来持久化并更新下载状态和AJAX框架。

答案 2 :(得分:0)

最简单的解决方案是估计时间(慷慨地)并以这种方式进行。这是一个黑客攻击,但它会产生预期的效果。另一个选项可能是使用Ajax提交带有回调的表单来提交表单并让生成器返回详细信息到调用页面。 http://www.jquery.com/可能是开始使用该选项的好地方。