Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengesan Selesai Muat Turun Fail dalam Penyemak Imbas tanpa Peristiwa 'muatan' yang Konsisten?

Bagaimanakah Saya Boleh Mengesan Selesai Muat Turun Fail dalam Penyemak Imbas tanpa Peristiwa 'muatan' yang Konsisten?

DDD
DDDasal
2024-12-18 05:56:15882semak imbas

How Can I Reliably Detect File Download Completion in a Browser without Consistent

Mengesan Selesai Muat Turun Fail dalam Penyemak Imbas

Penjanaan dan muat turun fail dinamik boleh menjadi satu cabaran apabila memberikan maklum balas kepada pengguna. Artikel ini mengkaji senario di mana pelayan menjana fail sebagai tindak balas kepada permintaan, tetapi penyemak imbas tidak memberikan petunjuk yang jelas apabila muat turun selesai.

Masalah: Had Pengesanan Peristiwa

Pengarang mengalami kesukaran mengesan penyiapan muat turun dalam senario mereka di mana fail dijana secara dinamik dan disimpan dalam iframe tersembunyi. Peristiwa "muatan" pada iframe tidak dicetuskan secara konsisten merentas penyemak imbas, membawa kepada penunjuk yang tidak boleh dipercayai.

Penyelesaian Alternatif: Tinjauan Sebelah Pelanggan

Satu penyelesaian melibatkan menggunakan mekanisme pengundian pihak pelanggan dalam JavaScript. Algoritma berfungsi seperti berikut:

  • Token unik dijana dan disertakan dalam permintaan muat turun.
  • Pelayar menunjukkan penunjuk "menunggu".
  • Pemasa bermula yang menyemak kuki dengan nama "fileDownloadToken" secara berkala.
  • Jika kuki itu ada dan sepadan dengan token, Penunjuk "menunggu" disembunyikan.

Respons Sebelah Pelayan

Kod sebelah pelayan bertindak balas dengan menetapkan kuki dengan nama "fileDownloadToken" apabila permintaan mengandungi nilai token bukan kosong. Kuki ini berfungsi sebagai isyarat kepada kod pihak pelanggan bahawa muat turun telah selesai.

Pelaksanaan Kod

Contoh JavaScript sisi klien:

function blockResubmit() {
  // ...
  downloadTimer = window.setInterval(function() {
    var token = getCookie("fileDownloadToken");

    if (token == downloadToken || attempts == 0) {
      unblockSubmit();
    }

    attempts--;
  }, 1000);
}

Contoh PHP sebelah pelayan:

$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();

Faedah ini Pendekatan

  • Ia tidak memerlukan penciptaan fail sementara pada pelayan.
  • Ia serasi dengan berbilang penyemak imbas.
  • Ia menyediakan cara yang boleh dipercayai untuk mengesan muat turun selesai dalam senario yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Selesai Muat Turun Fail dalam Penyemak Imbas tanpa Peristiwa 'muatan' yang Konsisten?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn