好的,这是一个关于浏览器交互和 HTTP 机制的一般问题
这是场景
- 界面非常丰富,有很多按钮。
- 用户点击“生成报告”按钮
- 然后有大约 15 秒的加载时间,然后出现“保存文件”对话框
- 用户将文件保存在他希望的任何位置并执行进一步的操作。
现在我想要:
- 阻止他在第 3 步中与界面交互。
- 在第 3 步结束时,触发一些特定的 JavaScript,例如显示弹出窗口。
所有这些实际上总结为“如何在 javascript 中检测下载对话框的外观”,因为一旦解决了这个问题,就很容易在文件生成过程中设置一些掩码,并在检测到事件后执行所需的操作。
不幸的是,似乎无法通过 Ajax 启动文件下载,因为它缺乏将 XMLHttpRequest
转换为另存为对话框的足够处理能力。因此,您需要提交一些表单,但该机制有点奇怪,因为尽管您提交了表单,但 DOM 中绝对没有任何反应。然后,浏览器检测到对表单提交的响应是传入文件,并显示一个下载框,而不是尝试显示文件内容,一旦用户完成下载框,浏览器就会设法恢复之前的界面。状态,以便用户可以继续浏览(或者至少这是我的理解)。
最佳答案
显示加载标志 x 秒,禁用点击事件(请参阅 here )或用一个对话框替换它们,说明加载时它们应该保持安静。
不要忘记让加载标志移动/显示进度,否则他们会感到无聊。我确信有很多库可以实现这一点,您甚至可以尝试使用 <'progress'> 标签。
正如@j3r3m7所说,如果他们想关闭浏览器,他们就会这样做;这里的目标是让用户明白他必须等待 x 秒并让他渴望等待。
您的其他问题请查看here
编辑:可以找到解决此类问题的有用插件 here .
关于javascript - 下载文件时防止用户交互的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571734/