chrome65使用download属性连续下载文件失效的问题

2018年05月05日Web前端

对于能够用正确路径访问到的文件,我们可以动态创建一个a标签,并使用他的download属性来下载该文件,但当连续下载时,高版本的chrome却只能下载一张。

一、现象

简化操作,假设我们就是点击这个a标签,

<body>
    <a href="pic.png" download id="download">下载</a>
<script type="text/javascript">
for (var i = 0; i < 3; ++i) {
    document.getElementById('download').click();
}
</script>
</body>

我在chrome33,59上尝试都是能下三次的。(有是否要下载多张的提示,自己电脑上的66也行。。。) 但是在59上,默认只能下载一张,没有任何提示。

二、方法

既然不能连续下,是不是浏览器太忙不能处理了呢,先加个定时器看看,

for (var i = 0; i < 3; ++i) {
    setTimeout(function () {
        document.getElementById('download').click();
    }, 100 * i);
}

发现每个延迟0.1s是能行的,这个0.1是临时给的,最小给到了21ms,再往下给就不行了。但是21ms放到真实的环境中还是不行,这就奇怪了,难道是因为cpu处理事情太多了? 再修改,强制让浏览器卡主1s,

for (var i = 0; i < 3; ++i) {
    setTimeout(function () {
        document.getElementById('download').click();
    }, 100 * i);
}

var now = +new Date();
while (1) {
   if (+new Date() - now > 1000) {
       break;
   }
}

发现65上还是只能下载一张,也就是下载还是和cpu状态有关的,回到家66版本能正常下。。。 搜了半天还木有这方面的资料。。。 还是保守留了一秒来下载。


以下2018-5-27更新, 将浏览器升级到最新的66版本后,发现没有这个问题了。。。。 难道是chrome的问题?