在瀏覽器中偵測檔案下載完成
在向使用者提供回饋時,動態檔案產生和下載可能是一個挑戰。本文研究了一個場景,其中伺服器產生檔案以回應請求,但瀏覽器沒有提供下載何時完成的明確指示。
問題:事件偵測限制
作者在動態產生檔案並保存在隱藏的 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中文網其他相關文章!