首页 >web前端 >js教程 >在没有一致的'加载”事件的情况下,如何可靠地检测浏览器中的文件下载完成情况?

在没有一致的'加载”事件的情况下,如何可靠地检测浏览器中的文件下载完成情况?

DDD
DDD原创
2024-12-18 05:56:15886浏览

How Can I Reliably Detect File Download Completion in a Browser without Consistent

在浏览器中检测文件下载完成

在向用户提供反馈时,动态文件生成和下载可能是一个挑战。本文研究了一种场景,其中服务器生成文件以响应请求,但浏览器没有提供下载何时完成的明确指示。

问题:事件检测限制

作者在动态生成文件并保存在隐藏的 iframe 中的情况下很难检测下载完成情况。 iframe 上的“load”事件在不同浏览器中触发不一致,导致指标不可靠。

替代解决方案:客户端轮询

一个解决方案涉及在 JavaScript 中使用客户端轮询机制。该算法的工作原理如下:

  • 生成唯一令牌并将其包含在下载请求中。
  • 浏览器显示“等待”指示器。
  • 计时器启动后会定期检查名称为“fileDownloadToken”的 cookie。
  • 如果 cookie 存在且与令牌匹配,则“等待”指示器被隐藏。

服务器端响应

当请求包含非空令牌值。此 cookie 向客户端代码发出下载完成的信号。

代码实现

客户端 JavaScript 示例:

function blockResubmit() {
  // ...
  downloadTimer = window.setInterval(function() {
    var token = getCookie("fileDownloadToken");

    if (token == downloadToken || attempts == 0) {
      unblockSubmit();
    }

    attempts--;
  }, 1000);
}

服务器端示例PHP:

$TOKEN = "downloadToken";

// Sets a cookie so that when the download begins the browser can
// unblock the submit button.
$this->setCookieToken($TOKEN, $_GET[$TOKEN], false);

$result = $this->sendFile();

这种方法的好处

  • 它不需要在服务器上创建临时文件。
  • 它是兼容的具有多个浏览器。
  • 它提供了一种可靠的方法来检测指定的下载完成情况场景。

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

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