首頁 >web前端 >js教程 >在沒有一致的「載入」事件的情況下,如何可靠地偵測瀏覽器中的檔案下載完成情況?

在沒有一致的「載入」事件的情況下,如何可靠地偵測瀏覽器中的檔案下載完成情況?

DDD
DDD原創
2024-12-18 05:56:15885瀏覽

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