Как проверить, завершена ли загрузка файлов в Chrome? - PullRequest
0 голосов
/ 26 апреля 2019

Когда пользователь нажимает кнопку загрузки / ссылку, на странице появляется экран загрузки.Я использую событие onblur на этой кнопке, чтобы скрыть экран загрузки после завершения процесса загрузки.Он отлично работает в любом браузере, но не в Google Chrome.

Есть ли какой-либо прослушиватель событий или другой простой способ , который я могу использовать для Chrome?

Ссылка:

<a href="/resources/foo" class="show-ls" onblur="hideLS()">Download</a>

Функция show-ls просто показывает экран загрузки:

$('.show-ls').click(function () {
  $('#loading-screen').show();
});

Экран загрузки - это элемент div в теле:

<div id="loading-screen" class="loading-screen" style=""></div>

.loading-screen {
  background: rgba(255, 255, 255, 0.6) url('/images/loadingscreen.gif') no-repeat fixed center center;
  width: 100%;
  height: 100%;
  position: fixed;
}

Функция hideLS просто скрывает экран загрузки:

hideLS= function () {
  var loadingScreen = $('div.loading-screen');
  if (loadingScreen.length > 0)
    loadingScreen.hide();
};

Процесс загрузки в порядке, экран загрузки тоже в порядке.Проблема только в том, что экран загрузки скрывается после завершения загрузки файла в Chrome.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Событие размытия - это просто хрупкий обходной путь, который может работать в браузере или нет.

Событие blur означает, что что-то теряет фокус. Возможно, браузер Firefox (помимо прочего) действительно размывает ссылку, по которой вы щелкнули, но все остальное может размывать и эту ссылку (изменение вкладки, щелчок по экрану загрузки и т. Д.). Это то, что вы, возможно, не хотите.

И поскольку HTTP является протоколом без состояния, мы не можем знать на стороне клиента, когда это будет завершено без помощи сервера. И вы не можете полагаться на то, что JS обнаружит это, поскольку файл загружается «на другой вкладке», в другом контексте, к которому у вас нет доступа.

Единственное решение, которое я могу себе представить (и других, как кажется ): Когда начинается загрузка, запускайте интервал JS, который регулярно (примерно каждые 500 мс или около того) проверяет сервер на загрузку статус. На стороне сервера вы должны определить загрузку для пользователя при ее запуске и ответить на статус обратно клиенту, когда его спросят. Как это работает, зависит, конечно, от серверной среды и языка программирования, который вы используете. Я знаю, вы можете заставить его работать в PHP, но я не знаю всех других языков.

Кстати: я бы назвал «загрузочный экран» «индикатор загрузки», потому что загрузочный экран (или заставка) - это картинка, которая отображается один раз перед загрузкой программного обеспечения (по крайней мере, на моем компьютере / мозге).

0 голосов
/ 26 апреля 2019

Если у вас есть учетная запись Google, вы можете просто нажать Ctrl + J или перейти в chrome: // downloads /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...