我有一个html页面,当我点击页面上的文件链接时,弹出文件下载对话框,此文件对话框锁定页面。我的意思是没有选择其中一个选项(打开,保存,取消),我无法在页面上执行任何操作(这是正常的)。我需要的是如果JavaScript可以检查页面是否被锁定。 (或文件对话框是否弹出?)什么时候文件下载对话框打开? - HTML,Javascript
ps.s.因为服务器可能响应非常缓慢(如点击后30秒)
我有一个html页面,当我点击页面上的文件链接时,弹出文件下载对话框,此文件对话框锁定页面。我的意思是没有选择其中一个选项(打开,保存,取消),我无法在页面上执行任何操作(这是正常的)。我需要的是如果JavaScript可以检查页面是否被锁定。 (或文件对话框是否弹出?)什么时候文件下载对话框打开? - HTML,Javascript
ps.s.因为服务器可能响应非常缓慢(如点击后30秒)
因为页面是锁定,因此您无法对JavaScript执行任何操作,因为您不能对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操作系统是一个例子,我认为),而打开该对话框不块的页面,所以这可能无法正常工作。如果你想要使用这个功能,一定要仔细检查一下。
我现在得去洗个澡。
如果你知道你的服务器返回下载一个文件,那么你就可以猜测当对话框这个迂回的技巧(这是我从一个计算器回答一个相关的问题,我问了)出现:
当你发出从页面的HTTP请求,增加其价值,是一些随机字符串参数(如"random" + new Date().getTime()
—它并不一定是安全的,但要避免碰撞)
服务器寻找该段仪表。当它开始发送附件下载时,它会添加一个包含随机字符串的cookie作为其值。
现在,页面发出HTTP请求后,它启动一个间隔计时器。定时器功能中的代码将检查document.cookie
寻找那个随机字符串。只要document.cookie
包含该字符串,那么您就知道HTTP响应已将其发送给浏览器。由于您知道浏览器会要求用户保存附件,因此您可以推断出该文件对话框正在显示。
我需要的是一种处理来自除直接用户“点击”以外的事件的文件附件的IE安全性的方法。我需要关闭一个模态对话框,所以我需要知道HTTP响应何时会返回。
这是值得一试,我会告诉你关于尝试后的结果。谢谢。 – Feyyaz 2010-04-02 15:05:16
*“不要说”将onclick事件添加到链接“,因为服务器可能响应非常缓慢(就像点击后30秒)”* **服务器**将与它有什么关系?当你选择文件时,这都是客户端。除非您提交表单,否则服务器不参与。 – 2010-04-02 11:32:50
实际上,我点击链接时提交表单,表单的响应是一个文件,而不是html文件。 – Feyyaz 2010-04-02 11:39:28
您定位了哪个浏览器?我在IE,Firefox,Opera和Chrome上进行了测试。 Chrome是唯一一个“锁定”网页的网站。 – nemetroid 2010-04-02 11:40:08