ホームページ >ウェブフロントエンド >jsチュートリアル >ブラウザ イベントなしでブラウザ ファイルのダウンロード完了を確実に検出するにはどうすればよいでしょうか?

ブラウザ イベントなしでブラウザ ファイルのダウンロード完了を確実に検出するにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-23 21:11:14434ブラウズ

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

ブラウザ ファイルのダウンロード完了の検出

問題の説明

動的ファイル ダウンロード メカニズムを備えたページには、次のことを行うための視覚的なインジケーターが必要です。ダウンロードが完了すると信号を送ります。ただし、ブラウザは、「保存」ダイアログが表示されたときにファイルの受信を示すイベントを常にトリガーするとは限りません。

サーバー応答の制限

「Content-Disposition:」の規定「attachment」ヘッダーはブラウザに「保存」ダイアログを表示するように指示しますが、イベントに使用される 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。