ブラウザでのファイルのダウンロード完了の検出
ユーザーにフィードバックを提供する場合、動的なファイルの生成とダウンロードは課題となる場合があります。この記事では、サーバーがリクエストに応じてファイルを生成するが、ブラウザーがダウンロードの完了時期を明確に示さないシナリオを検証します。
問題: イベント検出の制限
作成者は、ファイルが動的に生成され、非表示の iframe に保存されるシナリオで、ダウンロードの完了を検出するのが困難でした。 iframe の「load」イベントはブラウザ間で一貫してトリガーされず、信頼性の低いインジケーターが発生しました。
代替解決策: クライアント側ポーリング
解決策の 1 つは次のとおりです。 JavaScript のクライアント側ポーリング メカニズムを使用します。アルゴリズムは次のように機能します。
サーバー側の応答
サーバー側のコードは、「fileDownloadToken」という名前の 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 中国語 Web サイトの他の関連記事を参照してください。