js通过url下载js文件

方法

function _download(url,name) {

    var pdfurl=url;

    var fileName = name;

// 创建对象

    var xhr = xhr = new XMLHttpRequest()

// 创建一个 GET 请求,异步

    xhr.open('GET', pdfurl, true);

// 设置返回数据的类型为arraybuffer

//xhr.responseType = 'arraybuffer';

    xhr.responseType = 'blob' ;

// 设置请求头值

//xhr.setRequestHeader(KEYS.JWTToken, getStorageItem(KEYS.JWTToken));

// 接收到完整的响应数据时触发回调处理函数

    xhr.onload = function() {

        if (this.status === 200) {

// 获取请求头Content-Type的值,用来判断是否是文件流下载

            var type = xhr.getResponseHeader('Content-Type')

// application/json;charset=UTF-8:就是指“无类型”,一般的字节流用于数据传输,非文件下载

            if (type === 'application/json;charset=UTF-8') {

// this.response为arraybuffer对象,转为uint8数组

// var uint8 = new Uint8Array(this.response)

// 解决使用fromCharCode后中文乱码的问题

// var resToString = decodeURIComponent(escape((String.fromCharCode(...uint8))))

// var message = JSON.parse(resToString).message

// console.log(message)

// return

            }

// Blob()的第一个参数必须为数组,即使只有一个字符串也必须用数组装起来

            var blob = new Blob([this.response], {type: type})

// window.navigator.msSaveBlob:以本地方式保存文件

            if (typeof window.navigator.msSaveBlob !== 'undefined') {

                window.navigator.msSaveBlob(blob, fileName)

            } else {

                var URL = window.URL || window.webkitURL

// 创建新的URL表示指定的File对象或者Blob对象

                var objectUrl = URL.createObjectURL(blob)

                if (fileName) {

// 创建a标签用于跳转至下载链接

                    var a = document.createElement('a')

// download:指示浏览器下载URL而不是导航到它,也可设置下载文件的名称

                    if (typeof a.download === 'undefined') {

// window.location:获得当前页面的地址 (URL),并把浏览器重定向到新的页面

                        window.location = objectUrl

                    } else {

// href属性指定下载链接

                        a.href = objectUrl

// dowload属性指定文件名

                        a.download = fileName

// 将a标签插入body中

                        document.body.appendChild(a)

// click()事件触发下载

                        a.click()

// 去除a标签,以免影响其他操作

                        a.remove()

                    }

                } else {

                    window.location = objectUrl

                }

// 将URL释放

                URL.revokeObjectURL(objectUrl)

            }

        }

    }

    xhr.send();

}

调用

_download('https://easyv.assets.dtstack.com/components/tabV2/1.3.10/tabV2.js',123)

posted @ 2022-10-08 15:16  从入门到入土  阅读(332)  评论(0编辑  收藏  举报