WEB端常见几种下载方式分析

299 阅读2分钟

WEB端常见几种下载方式分析

下载方式

  1. window.open
  2. 通过a标签
  3. 通过iframe标签

以下是下载方式代码:

// 方式一 通过 window.open
window.open("下载地址")


// 方式二 通过 a 标签 
function download (src: string) {
        const a = document.createElement('a');
        a.download = src;
        a.href = src;
        a.click();
        setTimeout(() => {
            document.body.removeChild(a);
        }, 1000 * 60);
}


// 方式三 通过 iframe 标签 
function downLoadFile(src: string) {
    const iframe = document.createElement('iframe');
    iframe.src = src;
    iframe.id = 'iframe-downLoadFile-' + Date.now().toString(16);
    iframe.style.display = 'none';
    document.body.appendChild(iframe);
    setTimeout(() => {
        document.body.removeChild(iframe);
    }, 1000 * 60);

综合对比

下载方式优点/缺点建议使用场景
window.open优点:可以适用于99%的场景
缺点:1. 浏览器不刷新当前页面,会打开一个新的窗口加载下载地址,加载完成以后,很快关闭标签页,交互体验不好。2. 浏览器可能会阻止下载弹框,用户体验不友好。
可应用大部分下载场景
a标签加载url优点:可以选用于99%的场景。
缺点:浏览器会在当前窗口进行刷新动作,地址栏中的地址不变更,然后才会下载文件。浏览器可能会阻止下载弹框,用户体验不友好。
可应用于大部分下载场景,需要注意刷新当前页产生的影响, 比如页面有websocket连接情况,会造成断开重连的。
iframe标签加载src优点:静默方式下载,交互体验友好。
缺点:当下载文件地址返回的状态码是302时,location的下载地址域名与主站不同时,会有浏览器跨域安全限制,不会下载文件。
打开浏览器默认的访问外部应用的提示弹框,如打开邮件应用,聊天应用。下载,注意下载地址与主站地址不同域的情况,浏览器会限制下载,存在跨域安全问题。