我正在使用Chrome v67和FileSaver.js。
此代码在FF&Edge中有效,但在Chrome中不可用。
var ajaxSettings = {
url: "my/api/method",
data: JSON.stringify(myItems),
success: function (data) {
if (data) {
var dateToAppend = moment().format("YYYYMMDD-HHmmss");
createPdf("pdfDoc_" + dateToAppend + ".pdf", data[0]);
saveFile("txtDoc_" + dateToAppend + ".txt", data[1]);
//sleep(2000).then(() => {
// saveFile("txtDoc_" + dateToAppend + ".txt", data[1]);
//});
}
}
}
//function sleep(time) {
//return new Promise((resolve) => setTimeout(resolve, time));
//}
function createPdf(filename, pdfBytes) {
if (navigator.appVersion.indexOf("MSIE 9") > -1) {
window.open("data:application/pdf;base64," + encodeURIComponent(pdfBytes));
}
else {
saveFile(fileName, data);
}
}
function saveFile(fileName, data) {
var decodedByte64 = atob(data);
var byteVals = new Array(decodedByte64.length);
for (var i = 0; i < decodedByte64.length; i++) {
byteVals[i] = decodedByte64.charCodeAt(i);
}
var byte8bitArray = new Uint8Array(byteVals);
var blob = new Blob([byte8bitArray]);
saveAs(blob, fileName); //FileSaver.js
}
调用API的结果是其中包含2个字节数组的数组。 字节数组就是文档。
如果我像用户那样运行此代码,则发生的情况是第一个文档被“下载”,而第二个文档没有被“下载”。尝试再次执行此操作而不刷新页面将导致没有文档被“下载”。 “下载”一词用引号引起来,因为它已经被下载了,我真正想做的是从字节数组生成文档。
这是奇怪的事情...如果我打开控制台并在“ saveFile”调用上放置一个断点,并在调试器到达该断点时立即单击继续,那么一切就很好了,下载了2个文档
最初,我认为这是一个计时问题,所以我为此延迟了2秒,以查看是否是事实,但事实并非如此。我唯一设法开始工作的就是断点,无论我希望他们做多少,我显然都无法说服用户开始做。
非常感谢任何帮助或指针
答案 0 :(得分:0)
您可能在浏览器的左上角看到一条消息,指出
https://yoursite.com要
下载多个文件
[阻止] [允许]
如果您不再使用它,可能是因为您单击了“阻止”。
您可以在chrome://settings/content/automaticDownloads
中管理此限制。