我有一个html页面,当我单击页面上的文件链接时,文件下载对话框会弹出,这个文件对话框会锁定页面。我的意思是,如果不选择其中的一个选项(打开、保存、取消),我就不能在页面上做任何事情(这是正常的)。我需要的是如果javascript可以检查页面是否被锁定。(或者文件对话框是否弹出?)
附注:不要说“将一个onclick事件放到链接中”,因为服务器的响应可能非常慢(比如单击30秒后)。
发布于 2010-04-02 05:10:26
如果您知道您的服务器正在返回一个供下载的文件,那么您可以猜到该对话框是什么时候出现的(这是我从堆栈溢出问题中得到的一个相关问题的答案):
当您从页面发出HTTP请求时,添加一个参数,其值为一些随机字符串(如collisions)
document.cookie
,以查找该随机字符串。一旦document.cookie
包含该字符串,您就知道HTTP已将其发送到浏览器。由于您知道浏览器将要求用户保存附件,因此可以推断文件对话框在此时显示。。
我所需要的是一种处理IE安全问题的方法,即文件附件来自直接用户“点击”以外的事件。我需要关闭一个模态对话框,所以我需要知道HTTP响应何时会返回。
发布于 2010-04-02 03:49:15
因为页面是锁定的,所以您不能使用JavaScript做任何事情,因为它也是锁定的。
但是,你想做什么?您是否试图以某种方式记录用户正在下载该文件的事实?如果是的话,有更好的方法来做,而且它们都在服务器端。使用一些服务器端脚本语言为文件提供服务,并记录下载的事实。
如果这不是您想要做的,那么唯一的方法是在链接上使用onclick
或onunload
/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是一个例子)在打开对话框时不会阻塞页面,所以这可能行不通。如果你用这个的话,一定要仔细检查每件事。
我现在得去洗个澡了。
https://stackoverflow.com/questions/2566360
复制相似问题