背景
測試發(fā)現(xiàn),使用Firefox瀏覽器導(dǎo)出文件時,沒有反應(yīng)畜疾。查了一下赴邻,原來使用Ajax去Get調(diào)用服務(wù)端接口,返回了一個csar文件啡捶,F(xiàn)ireFox沒有彈出保存文件的對話框或者自動保存文件姥敛,按F12發(fā)現(xiàn)有請求,也正常返回了Blob文件流瞎暑。
并且在Chrome下面是正常的彤敛。
原因
Firefox不兼容導(dǎo)致的。
方案
最好的方案就是使用H5的新特性了赌,a
標(biāo)簽的download
attribute墨榄。
可以創(chuàng)建a標(biāo)簽配合download屬性
<a href="xxx/xxx/xx.xx" download="filename">
可以使用iframe.
有時候并沒有固定哪個URL,可能要服務(wù)端動態(tài)處理:
function download(url){
var iframe = document.createElement("iframe")
iframe.style.display = "none";
iframe.src = url;
document.body.appendChild(iframe);
}
- 通過Ajax請求
有時候有IFrame限制勿她,比如服務(wù)端不允許在IFrame中訪問
fetch('http://somehost/somefile.zip').then(res => res.blob().then(blob => {
var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
var filename = 'myfile.zip';
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
}))