2010-04-02 79 views
1

我有一个html页面,当我点击页面上的文件链接时,弹出文件下载对话框,此文件对话框锁定页面。我的意思是没有选择其中一个选项(打开,保存,取消),我无法在页面上执行任何操作(这是正常的)。我需要的是如果JavaScript可以检查页面是否被锁定。 (或文件对话框是否弹出?)什么时候文件下载对话框打开? - HTML,Javascript

ps.s.因为服务器可能响应非常缓慢(如点击后30秒)

+0

*“不要说”将onclick事件添加到链接“,因为服务器可能响应非常缓慢(就像点击后30秒)”* **服务器**将与它有什么关系?当你选择文件时,这都是客户端。除非您提交表单,否则服务器不参与。 – 2010-04-02 11:32:50

+0

实际上,我点击链接时提交表单,表单的响应是一个文件,而不是html文件。 – Feyyaz 2010-04-02 11:39:28

+0

您定位了哪个浏览器?我在IE,Firefox,Opera和Chrome上进行了测试。 Chrome是唯一一个“锁定”网页的网站。 – nemetroid 2010-04-02 11:40:08

回答

1

因为页面是锁定,因此您无法对JavaScript执行任何操作,因为您不能对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操作系统是一个例子,我认为),而打开该对话框不的页面,所以这可能无法正常工作。如果你想要使用这个功能,一定要仔细检查一下。

我现在得去洗个澡。

+0

肮脏的解决方案是如此聪明:)。谢谢。 – Feyyaz 2010-04-02 12:10:46

+0

不幸的是,该解决方案在IE6中无法使用。虽然这很聪明:)。 – Feyyaz 2010-04-02 12:55:58

+0

我可能只是需要对IE6进行一些调整(我不明白为什么它不会,除非IE6不阻止页面)。也许IE6不知道'.getTime()'什么的。它会给出任何错误吗? – Felix 2010-04-02 13:13:07

3

如果你知道你的服务器返回下载一个文件,那么你就可以猜测当对话框这个迂回的技巧(这是我从一个计算器回答一个相关的问题,我问了)出现:

  1. 当你发出从页面的HTTP请求,增加其价值,是一些随机字符串参数(如"random" + new Date().getTime() —它并不一定是安全的,但要避免碰撞)

  2. 服务器寻找该段仪表。当它开始发送附件下载时,它会添加一个包含随机字符串的cookie作为其值。

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

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

+0

这是值得一试,我会告诉你关于尝试后的结果。谢谢。 – Feyyaz 2010-04-02 15:05:16