账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用download属性连续下载,在高版本chrome中只能下载一张的问题
    100
    0

    动态添加a标签,设置download属性下载,在chorme(我试的是33和59)下有用,但在65版本下有用,
    简化代码,如下:

    <body>
        <a href="1.txt" download id="down">123</a>
    </body>
    <script>
    for (var i = 0; i < 3; ++i) {
        // setTimeout(function () {
        document.getElementById('down').click();
        // }, 100 * i);
    }
    </script>

    此段代码在65下,只下载一个,在33和59下会提示是否允许下载多个的提示。
    打开注释,65下也能正常下载3个,但没有允许下载多个的提示。
    经测试,延时的大小和下载文件的大小无关

    似乎与cpu有关,
    在for循环之后,以下代码,65上也只能下载一个了。

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

    想问下,这是什么原因,或者有没有更好的处理方式?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在高版本的Chrome浏览器中,使用download属性进行连续下载时可能会遇到只能下载一张(或一个文件)的问题。这是因为Chrome为了防止恶意连续下载以及保护用户体验,默认限制了通过JavaScript触发的下载行为,同一时间内只会处理一个download属性触发的下载请求。

      如果你需要让用户连续下载多个文件,可以考虑以下两种解决办法:

      1. 用户交互触发下载:将每个下载链接展示给用户,由用户手动点击下载。这样每次下载都是用户主动触发,不受Chrome的自动下载限制。

      2. 延时触发下载:对于编程触发下载的情况,可以为每个下载操作添加适当的延时,模拟用户点击下载之间的间隔,例如:

      javascript let urls = ['file1.pdf', 'file2.pdf', 'file3.pdf']; for (let url of urls) { setTimeout(() => { let a = document.createElement('a'); a.href = url; a.download = ''; a.click(); }, 100); // 延迟100毫秒以模拟用户行为,具体延迟时间可以根据实际需求调整 }

      需要注意的是,这种方法并不保证在所有情况下都能成功连续下载,因为不同浏览器可能有不同的策略来处理这种情况。如果需要更稳定的批量下载功能,建议在服务器端实现或者提供ZIP压缩包下载等替代方案。

    • 雷袭月启 普通会员 2楼

      在高版本的Chrome浏览器中,如果使用HTML5的download属性进行连续下载,可能会遇到只能下载一个文件的问题。这是因为Chrome为了防止恶意或意外的连续下载行为,对同一标签页下的多个下载请求进行了限制。

      解决这个问题的方法有以下几种:

      1. 分别打开新的标签页进行下载:对于需要连续下载的文件,可以创建新的标签页或者窗口进行下载,每个链接在一个新的标签页中打开并自动下载。

      2. 使用JavaScript控制下载:通过编程的方式动态创建a标签,并触发点击事件来进行下载,每次下载后移除该a标签,再创建下一个下载链接。

      例如: javascript var downloadLinks = ['file1.pdf', 'file2.pdf', 'file3.pdf']; for (var i = 0; i < downloadLinks.length; i++) { var a = document.createElement('a'); a.href = downloadLinks[i]; a.download = ''; document.body.appendChild(a); a.click(); a.remove(); } 3. 用户手动点击下载:如果是在用户交互场景下,可以让用户手动点击每个下载链接进行下载。

      1. 如果是Web应用,还可以考虑将多个文件打包成一个压缩包提供给用户一次性下载。

      请注意,不同的浏览器可能对download属性的支持程度和行为有所不同,开发时需要做好兼容性处理。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部