Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件下载对话框何时打开?-HTML、Javascript_Javascript_Html_Savefiledialog - Fatal编程技术网

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

文件下载对话框何时打开?-HTML、Javascript,javascript,html,savefiledialog,Javascript,Html,Savefiledialog,我有一个html页面,当我点击页面上的文件链接时,会弹出文件下载对话框,这个文件对话框会锁定页面。我的意思是,如果不选择其中一个选项(打开、保存、取消),我就无法在页面上执行任何操作(这是正常的)。我需要的是javascript是否可以检查页面是否被锁定。(或者是否弹出文件对话框?) p、 不要说“将onclick事件放在链接上”,因为服务器的响应可能非常慢(比如点击后30秒)因为页面被锁定了,你不能用JavaScript做任何事情,因为它也被锁定了 但是,你想做什么?您是否试图以某种方式记录用

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

p、 不要说“将onclick事件放在链接上”,因为服务器的响应可能非常慢(比如点击后30秒)

因为页面被锁定了,你不能用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就是一个例子)在打开对话框时不会阻止页面,所以这可能不起作用。如果你要用这个,一定要仔细核对每件事


我现在得去洗澡了。

如果你知道你的服务器正在返回一个文件供下载,那么你可以猜到这一轮关于技巧的对话何时出现(这是我从stackoverflow获得的对我问的一个相关问题的回答):

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

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

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


  • 我所需要的是一种处理IE安全问题的方法,即文件附件来自事件而不是直接用户“点击”。我需要关闭一个模式对话框,因此我需要知道HTTP响应何时返回。

    “不要说“将onclick事件放到链接上”,因为服务器可能响应非常慢(如单击后30秒),“服务器会如何处理它?”?当您选择文件时,这些都是客户端的。在您提交表单之前,服务器不会参与。实际上,我在单击链接时提交表单,表单的响应是文件,而不是html文档。您的目标浏览器是什么?我测试了IE、Firefox、Opera和Chrome。Chrome是唯一一个“锁定”页面的浏览器。在FF中,如果我右键单击链接并执行“将链接另存为”操作,则会出现一个模式对话框。为什么要检查文件下载对话框是否打开?换句话说,如果你有一个解决方案,你会用它做什么?不幸的是,这个解决方案在IE6中不起作用。这很聪明:)。我可能只是需要一些调整才能在IE6上工作(我不明白为什么它不会,除非IE6不阻止页面)。也许IE6不知道
    .getTime()
    或其他什么。它是否给出任何错误?事实上,IE6确实阻止了页面,但javascript仍在运行。这就是它不起作用的原因。值得一试,我会在尝试后告诉你结果。谢谢