我创建了一个小的脚本,该脚本调用API来获取PDF并将responseType作为arraybuffer发送。

使用这个我创建一个新的Blob并将类型设置为'application / pdf'

为了强制下载,我创建了一个锚元素,将其传递给blob并单击它。

这在本地以及测试服务器上的其他浏览器上都可以正常运行,但是在Chrome上我却失败了-下载栏中没有文件。

PDF绝对可用,因为我可以将URL粘贴到选项卡中的URL并查看它,并将原始API调用的响应传递到Blob。

样例代码

var fileName = 'dummyFilename-' + offerId + '.pdf';
var blob = new window.Blob([resData], { type: 'application/pdf' });

var anchorElement = document.createElement('a');
var url = window.URL.createObjectURL(blob);

document.body.appendChild(anchorElement);
anchorElement.id = 'anchorElement';
anchorElement.hidden = 'true';
anchorElement.href = url;

if (typeof anchorElement.download !== 'undefined') {
    anchorElement.download = fileName;
} else {
    anchorElement.target = '_blank';
}

anchorElement.click();

最佳答案

您是否有uBlock Origin之类的广告屏蔽扩展程序?如果是这样,则可能阻止了弹出窗口/选项卡中的所有Blob URL。 Easylist默认情况下是这样做的:

https://github.com/easylist/easylist/commit/e3276b6ff9611e821d0e8ba7ac4dc336a4e3b765

就我而言,我为我的网站禁用了uBlock Origin,它可以正常工作。

09-19 04:46