猿问

如何检查Chrome中的文件下载是否完成?

当用户单击下载按钮/链接时,页面上将显示加载屏幕。下载过程完成后,我在此按钮上使用onblur事件隐藏我的加载屏幕。它可以在任何浏览器上正常运行,但不能在谷歌浏览器上运行。


我可以在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中完成文件下载后隐藏加载屏幕。


慕无忌1623718
浏览 775回答 2
2回答

慕沐林林

blur事件只是一个脆弱的解决方法,可能无法在浏览器中运行。该blur事件意味着某件事正在失去焦点。可能是Firefox浏览器(及其他)确实确实模糊了您单击的链接,但其他任何东西也可能模糊了该链接(更改选项卡,单击加载屏幕等)。这可能是您不想要的。而且由于HTTP是一种无状态协议,因此在没有服务器帮助的情况下,我们无法知道客户端何时完成此操作。而且您不能依靠JS来检测到此错误,因为文件下载是在“其他选项卡”中进行的,而您无法访问该文件。我可以想象的唯一解决方案(看起来也是如此):当下载开始时,启动一个JS间隔,该间隔定期(例如每500毫秒左右)检查服务器的下载状态。在服务器端,您必须在启动时向用户标识下载,并在询问时将状态返回给客户端。当然,这如何工作取决于您使用的服务器环境和编程语言。我知道,您可以使其在PHP中运行,但我不了解所有其他语言。顺便说一句:我将“加载屏幕”称为“加载指示器”,因为加载屏幕(或启动屏幕)是在软件加载之前(至少在我的计算机/大脑上)显示一次的图片。

偶然的你

如果您拥有Google帐户,则只需按Ctrl + J或转到chrome:// downloads /
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答