前言:
最近项目写下载功能,下载方式有多种,后端通过返回数据流的形式下载,这种方式需要前端将其转为二进制然后使用a标签点击下载,再就是直接通过模拟a标签点击链接下载,这类文件需要配合oss相关的配置进行使用。我这边下载使用的第二种方式
问题:
在使用第二种方式调用下载方式的时候,遇到了一个问题:
尝试载入资源时发生错误,很尴尬,然后在控制台报了一个错误:due to access control checks.
一个警告:The download attribute on anchor was ignored because its href URL has a different security origin
经过排查,是跨域的问题,但是这在chrome上并没有此类错误,只发生在safari上.原因是在我使用link点击下载后,会立即调用一个源网站的接口,当调用下载后,其实会相当于跳转到新页面,当我再调用源网站的接口时,就会报跨域了。
点击链接下载方法:
function downloadFile(fileUrl, fileName) {
let aLink = document.createElement('a');
aLink.download = fileName;
aLink.href = fileUrl;
aLink.style.display = 'none';
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink);
}
解决方案:
延时链接下载