首页 >web前端 >js教程 >我们如何在没有浏览器事件的情况下可靠地检测浏览器文件下载完成?

我们如何在没有浏览器事件的情况下可靠地检测浏览器文件下载完成?

Barbara Streisand
Barbara Streisand原创
2024-12-23 21:11:14461浏览

How Can We Reliably Detect Browser File Download Completion Without Browser Events?

检测浏览器文件下载完成

问题陈述

具有动态文件下载机制的页面需要一个视觉指示器下载完成时发出信号。然而,当出现“保存”对话框时,浏览器并不总是触发事件来指示文件接收。

服务器响应限制

“内容处置: “附件”标头指示浏览器显示“保存”对话框,但它会抑制用于事件的 iframe 的加载

建议的解决方案

利用 JavaScript 和服务器端 cookie 实现基于客户端的解决方案:

客户端算法

  1. 生成一个独特的令牌。
  2. 使用令牌提交下载请求。
  3. 显示“等待”指示器。
  4. 定期轮询服务器以查找匹配的名为“fileDownloadToken”的 cookie令牌。
  5. 如果找到 cookie,则删除“等待”

服务器算法

  1. 从请求中提取令牌。
  2. 创建一个名为“fileDownloadToken”的 cookie并将其值设置为接收到的token.

示例实现

  • 客户端 JavaScript(简化)
var downloadToken = setFormToken();

var downloadTimer = setInterval(function() {
  var token = getCookie("fileDownloadToken");

  if(token == downloadToken) {
    unblockSubmit();
  }
}, 1000);
  • 服务器端PHP(简化)
// Set a cookie to unblock the submit button when download starts
$this->setCookieToken("downloadToken", $_GET["downloadToken"]);

$result = $this->sendFile();

优点

  • 不需要创建临时文件。
  • 检测文件下载准备就绪,无需依赖事件侦听器。
  • 可以根据特定令牌名称和 cookie 设置进行自定义。

以上是我们如何在没有浏览器事件的情况下可靠地检测浏览器文件下载完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn