文件下载对话框何时打开? - HTML,Javascript

时间:2010-04-02 11:25:24

标签: javascript html savefiledialog

我有一个html页面,当我单击页面上的文件链接时,弹出文件下载对话框,此文件对话框将锁定页面。我的意思是没有选择其中一个选项(打开,保存,取消)我在页面上无法做任何事情(这是正常的)。我需要的是,如果javascript可以检查页面是否被锁定。 (或者是否弹出文件对话框?)

P.S。不要说“将一个onclick事件放到链接上”,因为服务器可能响应非常慢(例如点击后30秒)

2 个答案:

答案 0 :(得分:3)

如果你知道你的服务器正在返回一个文件供下载,那么当对话框出现时,你可以猜测这个圆形技巧(我从stackoverflow回答相关问题)我问道:

  1. 当您从页面发出HTTP请求时,添加一个值为随机字符串的参数(如"random" + new Date().getTime() - 它不必是安全的,但您希望避免冲突)

  2. 服务器查找该参数。当它开始发回附件以供下载时,它会添加一个以随机字符串作为其值的cookie。

  3. 现在,在页面发出HTTP请求后,它会启动间隔计时器。 timer函数中的代码检查document.cookie查找该随机字符串。只要document.cookie包含该字符串,您就知道HTTP响应已经进入浏览器。由于您知道浏览器会要求用户保存附件,因此您可以推断出此时正在显示文件对话框。

  4. 我需要这个是一种处理IE安全事件的方法,该文件附件来自直接用户“点击”以外的事件。我需要关闭一个模态对话框,所以我需要知道HTTP响应何时返回。

答案 1 :(得分:1)

由于页面已锁定,因此您无法对JavaScript执行任何操作,因为它也已锁定。

但是,你想做什么?您是否试图以某种方式记录用户正在下载文件的事实?如果是的话,有更好的方法,它们在服务器端。使用一些服务器端脚本语言来提供文件并记录下载它的事实。

如果那不是您要做的事情,那么唯一的方法是使用链接上的onclickonunload / onbeforeunload,但这些不太可靠而且我是确保您在不同的浏览器上找到完全不同的行为。

实际上,现在我想起来了,还有一种方法,但它非常脏。我们的想法是设置一个每秒运行一次的间隔,并检查两次运行之间是否超过一秒。类似的东西:

var lastTime = new Date().getTime();
function checkTime() {
    var curTime = new Date().getTime();
    if (curTime - lastTime > 1100) { // 1100 because there might be small browser lags 
        // do something after the dialog appeared and the user did something with it
    }
    lastTime = curTime;
}
setInterval(checkTime, 1000);

请注意,有些浏览器(我认为Chrome就是一个例子)在打开该对话框时不会阻止页面,所以这可能不起作用。如果你要使用它,请务必双重检查所有内容。

我现在必须去洗澡。