a标签模拟下载

简介: a标签模拟下载
/**
 * a标签下载
 *
 * @param {*} url 链接
 * @param {*} options 参数 { payload: url携带参数 }
 * @returns {Boolean} success
 */
export function downloadByLink(url, options) {
    if (!url) return false

    const a = document.createElement('a')

    // 添加属性
    let href = url
    const {
        payload,
        ...attrs
    } = options || {}
    attrs.href = payload ? (href += '?' + qs.stringify(payload)) : href
    Object.entries(attrs).forEach(([key, value]) => {
        a.setAttribute(key, value)
    })
    a.setAttribute('target', '_self')

    // 触发下载
    document.body.appendChild(a)
    a.click()
    a.onclick = e => {
        e && e.preventDefault()
    }
    a.parentNode.removeChild(a)

    return true
}
AI 代码解读

加载script

/**
 * 加载脚本
 *
 * @param {String} src 地址
 * @param {*} options 属性 { autoremove: 用完就扔, ... }
 *
 * @returns {Promise}
 *
 * @throws {Error}
 */
export function loadScript(src, options) {
    const {
        autoremove = true, ...attrs
    } = options || {}
    return new Promise((resolve, reject) => {
        const script = document.createElement('script')
        Object.entries(attrs).forEach(([key, val]) => {
            script.setAttribute(key, val)
        })
        script.src = src
        script.onload = () => {
            if (autoremove) {
                script.onload = script.onerror = null
                document.head.removeChild(script)
            }
            resolve()
        }
        script.onerror = reject
        document.head.appendChild(script)
    })
}
AI 代码解读

Blob文件转换下载

// Blob文件转换下载
export const downBlobFile = (result, fileName, fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;', submitEndDo ? , timeSuffix = true) => {
    const data = result
    const blob = new Blob([data], {
        type: fileType
    })
    if (timeSuffix) {
        // 默认导出的文件名称添加时间
        const time = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
        fileName = fileName + ' ' + time
    }
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        // for IE
        // IE必须给文件名设置固定后缀,不然默认会是.txt
        window.navigator.msSaveOrOpenBlob(blob, fileName + '.xlsx')
    } else {
        // for Non-IE (chrome, firefox etc.)
        const objectUrl = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.setAttribute('style', 'display:none')
        a.setAttribute('href', objectUrl)
        a.setAttribute('download', fileName)
        a.click()
        URL.revokeObjectURL(objectUrl)
    }
    if (submitEndDo) {
        submitEndDo()
        submitEndDo = null
    }
}
AI 代码解读
目录
打赏
0
0
0
0
2
分享
相关文章
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
699 0
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
Puppeteer教程:使用CSS选择器点击和爬取动态数据
本文介绍如何使用Puppeteer结合CSS选择器爬取动态网页数据,以贝壳网的二手房价格为例,通过代理IP提高爬虫成功率。文章详细讲解了Puppeteer的安装和配置、代码实现及数据趋势分析,帮助读者掌握动态网页爬取技术。
190 1
Puppeteer教程:使用CSS选择器点击和爬取动态数据
|
7月前
分别利用phantomjs和slimerjs实现网页的爬取和截图代码逻辑
文章介绍了如何使用PhantomJS和SlimerJS两种工具实现网页的爬取和截图,提供了具体的代码示例和执行命令。
47 0
|
10月前
鼠标点击效果.html(网上收集6)
鼠标点击效果.html(网上收集6)
Chrome中实现使用迅雷一次性选中并下载网页内全部链接的方法
Chrome中实现使用迅雷一次性选中并下载网页内全部链接的方法
213 1
用js脚本下载某书的所有文章
用js脚本下载某书的所有文章
89 0
window.open(url)多次打开下载链接被浏览器拦截问题解决方案,js实现循环访问多个下载链接
window.open(url)多次打开下载链接被浏览器拦截问题解决方案,js实现循环访问多个下载链接
844 0
window.open(url)多次打开下载链接被浏览器拦截问题解决方案,js实现循环访问多个下载链接
chrome浏览器三步搞定完整网页截图
第一步:点击F12进入开发者模式 第二步:Ctrl+shift+p  输入full   link) 第三步:点击screenshot 即可下载完整网页长图  如下:效果 link
3943 0
JS - 原生js实现 网页截图(+下载截图) 功能
实现:html2canvas + canvas.toDataURL 首先,引入依赖插件: import { html2canvas } from './html2canvas'; html2canvas截图模糊处理:   1 /*图片跨域及截图模糊处理*/ 2 let canvasContent = document.
4141 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等