在65以后版本的chrome里限制了a.download在跨域情形下的作用,现在不能直接用这个来下载了,比如是图片的话会直接打开。
在 StackOverflow 看到一个回答使用 fetch 来下载的方法。
fetch 和 XMLHttpRequest 一样用来传输资源,但API更简洁 (MDN)
var forceDownload = function(blob, filename) {
var a = document.createElement('a');
a.download = filename;
a.href = blob;
a.click();
}
// Current blob size limit is around 500MB for browsers
var downloadResource = function (url, filename) {
if (!filename) filename = url.split('\\').pop().split('/').pop();
fetch(url, {
headers: new Headers({
'Origin': location.origin
}),
mode: 'cors'
})
.then(response => response.blob())
.then(blob => {
let blobUrl = window.URL.createObjectURL(blob);
forceDownload(blobUrl, filename);
})
.catch(e => console.error(e));
}