在浏览器中检测文件下载完成
在向用户提供反馈时,动态文件生成和下载可能是一个挑战。本文研究了一种场景,其中服务器生成文件以响应请求,但浏览器没有提供下载何时完成的明确指示。
问题:事件检测限制
作者在动态生成文件并保存在隐藏的 iframe 中的情况下很难检测下载完成情况。 iframe 上的“load”事件在不同浏览器中触发不一致,导致指标不可靠。
替代解决方案:客户端轮询
一个解决方案涉及在 JavaScript 中使用客户端轮询机制。该算法的工作原理如下:
服务器端响应
当请求包含非空令牌值。此 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中文网其他相关文章!