当前位置: 首页 > 面试题库 >

检测用户何时接受下载文件

濮阳和泰
2023-03-14
问题内容

我想在用户单击允许他们下载文件的超链接后将用户重定向到其他网页。但是,由于它们需要在打开/保存文件对话框中进行选择,因此在它们接受下载之前,我不希望它们重定向。

我如何检测到他们执行了此操作?


问题答案:

正如我多年维护download.js所发现的那样,根本 无法 通过JS
来告诉用户
(或可能通常参见下文),用户选择如何使用下载“打开/保存”对话框。这是一个常见的功能请求,多年来我一直在反复研究。我可以自信地说,这是不可能的。如果有人可以演示一种机械方法来确定对任何文件的提示后用户操作,我将乐意为此赏金支付10倍!

此外,这实际上不只是JS规则的问题,浏览器下载并提示此类文件的方式使问题变得更加复杂。这意味着即使服务器也无法始终告诉发生了什么。在某些特定情况下,可能会有一些特定的解决方法,但是它们并不漂亮或简单。

您可以强迫用户使用来“重新上传”下载的文件以<input type=file>进行验证,但这充其量是麻烦的,而且本地文件浏览对话框可能会有些警告。这是确保下载的唯一肯定方法,但是对于非敏感应用程序,它非常严酷,并且在某些缺少文件支持的“移动”平台上无法使用。

您也可以尝试从服务器端进行监视,向客户端推送一条消息,指出该文件已在服务器上被击中。这里的问题是,尽管在后台看不见,但一旦出现“打开/保存”对话框,下载就会立即开始下载。这就是为什么如果您稍等片刻才能“接受”大文件,那么它似乎一开始会很快下载。从服务器的角度来看,无论用户做什么,活动都是相同的。

对于巨大的文件,您可能会检测到整个文件 没有
传输,这意味着用户单击了“取消”,但这是一个复杂的同步过程,将状态从后端推到了客户端。这将需要大量的套接字自定义编程,PHP消息传递,EventSource等,以获取很少的收益。这也是一场与时间的竞赛,并且时间不确定。不建议您减慢下载速度以提高用户满意度。

如果是小文件,它将在用户甚至看不到对话框之前进行物理下载,因此服务器将无用。还要考虑到某些下载管理器扩展可以代替这项工作,并且不能保证它们的行为与普通浏览器相同。对于硬盘驱动器速度慢,需要“永远”才能“完成”下载的用户而言,强迫等待可能会很危险。我们都经历过这种情况,并且在“棘手的问题”逐渐消退时不能继续进行下去,这可能会降低用户满意度。

简而言之,除了您知道将需要很长时间才能下载的大文件以外,没有简单的方法,而且实际上也没有一般的方法。我花了很多心血和泪水试图为我的download.js用户提供此功能,但是根本没有好的选择。Ryan
dahl最初编写了node.js,因此他可以为用户提供一个上传进度条,也许有人会制作一个服务器/客户端程序包以使下载操作变得容易。



 类似资料:
  • 问题内容: 我有一个页面,允许用户下载动态生成的文件。生成需要很长时间,因此我想显示一个“等待”指示器。问题是,我不知道如何检测浏览器何时收到文件,因此可以隐藏指示器。 我正在以隐藏的形式发出请求,该请求会发布到服务器,并以隐藏的iframe作为结果。这样一来,我就不会用结果替换整个浏览器窗口。我在iframe上侦听“加载”事件,希望下载完成后将触发该事件。 我随文件返回一个“ Content-D

  • 问题内容: 我有一个JComboBox的子类。我尝试使用以下代码添加一个键侦听器。 但是,这不能正确检测用户何时按下一个键。实际上根本没有调用它。我添加的这个监听器是否错误?还有其他添加方式吗? 问题答案: 关键事件不是在框本身上触发的,而是在其编辑器上触发的。您需要将keyListener添加到JComboBox的编辑器中,而不是直接添加到框中: 编辑:固定方法调用。

  • 问题内容: 我正在基于此页面使用脚本标签长轮询技术实现Comet 。 一个问题(我认为没有解决方案)是“厄运的th子”-浏览器继续将文档永远显示为“正在加载”,并使工具栏上的“停止”按钮保持启用状态。这种品牌的意义,因为该文件 是 仍然加载,虽然它的效果并不理想,我想我可以住在一起。 但是,第二个问题是,如果用户实际单击“停止”,则浏览器将停止加载我的脚本标签,并且我必须依靠超时来重新启动Come

  • 我正在实施Alexa智能家居技能,我想知道用户在一段时间后是否仍在使用该应用。 例如,当我从Google Smarthome应用程序解除关联时,Google Home会发送请求。如果用户不再使用该技能,我需要知道它来禁用向亚马逊阿列克谢网关发送更新。 最好的方法是什么?Alexa留档不谈论它。 我可以依靠仅仅检查用户是否有过期的OAuth令牌吗?例如,如果过期超过一天,将用户标记为不活动。 我明天

  • 问题内容: 我需要根据他们的IP或http标头了解用户当前所在的时区。 关于这个问题,我有很多答案,但是我听不懂那些答案。有人说使用。但是这是什么意思? 我的(index.php)页面的根目录中有一个。因此,为此,我必须动态获取时区并将其设置为。 问题答案: 总结一下Matt Johnson在代码方面的答案:

  • 我有一个可以工作的DM命令,但如果我尝试DM一个关闭了DMs的人,会给出以下错误: 我如何让它检查用户是否打开了DMs?