文件保护程序.js Chrome 问题,多个文档



我正在使用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 秒的延迟,看看是否是这样,但事实并非如此。 我唯一设法工作的是断点,无论我多么希望他们这样做,我显然都无法说服用户开始做。

任何帮助或指示都非常感谢

您可能在浏览器的左上角看到一条消息,指出

https://yoursite.com 想要
下载多个文件
[阻止] [允许]

如果您不再拥有它,可能是因为您单击了"阻止"。
您可以在chrome://settings/content/automaticDownloads中管理此限制。

最新更新