我正在使用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的结果是一个包含两个字节数组的数组。字节数组是文档。
如果我像用户一样运行这段代码,那么会发生的情况是,第一个文档被“下载”了,而第二个文档却没有。尝试在不刷新页面的情况下第二次这样做会导致没有文档被“下载”。“下载”字是用引号表示的,因为它已经被下载了,我真正想做的是从字节数组中生成文档。
这是奇怪的一点..。如果我打开控制台并在"saveFile“调用上放置一个断点,然后在调试器降落到断点时立即按下”继续“,那么世界就好了,并且下载了2个文档。
我最初认为这是时间问题,所以我花了2秒的时间来看看是否是这样,但事实并非如此。我唯一能做到的就是断点,不管我多么希望他们这么做,我都无法说服用户开始做。
任何帮助或指示都非常感谢。
发布于 2018-06-20 08:48:57
您可能会在浏览器的左上角遇到一条消息:
https://yoursite.com想 下载多个文件 区块
如果你不再拥有它,那可能是因为你点击了“阻止”。
您可以在chrome://settings/content/automaticDownloads中管理此限制。
https://stackoverflow.com/questions/50931271
复制相似问题