javascript - 下载文件时防止用户交互的正确方法是什么?

标签 javascript html browser download

好的,这是一个关于浏览器交互和 HTTP 机制的一般问题

这是场景

  1. 界面非常丰富,有很多按钮。
  2. 用户点击“生成报告”按钮
  3. 然后有大约 15 秒的加载时间,然后出现“保存文件”对话框
  4. 用户将文件保存在他希望的任何位置并执行进一步的操作。

现在我想要:

  • 阻止他在第 3 步中与界面交互。
  • 在第 3 步结束时,触发一些特定的 JavaScript,例如显示弹出窗口。

所有这些实际上总结为“如何在 javascript 中检测下载对话框的外观”,因为一旦解决了这个问题,就很容易在文件生成过程中设置一些掩码,并在检测到事件后执行所需的操作。

不幸的是,似乎无法通过 Ajax 启动文件下载,因为它缺乏将 XMLHttpRequest 转换为另存为对话框的足够处理能力。因此,您需要提交一些表单,但该机制有点奇怪,因为尽管您提交了表单,但 DOM 中绝对没有任何反应。然后,浏览器检测到对表单提交的响应是传入文件,并显示一个下载框,而不是尝试显示文件内容,一旦用户完成下载框,浏览器就会设法恢复之前的界面。状态,以便用户可以继续浏览(或者至少这是我的理解)。

最佳答案

显示加载标志 x 秒,禁用点击事件(请参阅 here )或用一个对话框替换它们,说明加载时它们应该保持安静。
不要忘记让加载标志移动/显示进度,否则他们会感到无聊。我确信有很多库可以实现这一点,您甚至可以尝试使用 <'progress'> 标签。
正如@j3r3m7所说,如果他们想关闭浏览器,他们就会这样做;这里的目标是让用户明白他必须等待 x 秒并让他渴望等待。

您的其他问题请查看here

编辑:可以找到解决此类问题的有用插件 here .

关于javascript - 下载文件时防止用户交互的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571734/

相关文章:

javascript - 为什么广告在我的开发盒上停止呈现?

javascript - MS Edge 将属性的空白值更改为 1

html - 我怎样才能使用 flexbox 做这个 3 div 布局?

javascript - angularjs 选择选择框中的第一个值

javascript - 应用过滤器后 jQuery 调整窗口大小

javascript - 隐藏/显示随内容变化的链接。

javascript - 浏览器 EventListenerList 实现

browser - "Are you sure you want to navigate away from this page? "是如何在浏览器中生成的?

javascript - Webpack + Keycloak JavaScript : Resource was blocked due to MIME type (“text/html” )

javascript - 将数组中的最后一个对象推送到下一个数组