У меня есть некоторый рабочий код, который получает PDF от вызова API и отображает PDF на странице во всех браузерах.
Однако до меня дошло, что метод msSaveOrOpenBlob
устарел и не должен использоваться в производственных сборках.
Я нашел API для загрузки , однако этот не поддерживается в Edge / Internet Explorer.
Итак, мой вопрос: каков рекомендуемый подход? Существует ли Edge / IE полизаполнение для API загрузок?
Текущее решение JavaScript (Angular):
async downloadPDF(label, doc) {
this.selectedDocumentLabel = label;
const anchorTag = document.getElementById(doc) as HTMLAnchorElement;
const endPoint = `${this.logConfig.docsUrl}/${doc}`;
try {
const b64Data = await this.hrdocsService.getDocumentByUUID(endPoint, this.ibmclientidData, this.tokenData); // Returns base64string
if (b64Data) {
if (window.navigator && window.navigator.msSaveOrOpenBlob) { // download docs in IE
const byteChars = atob(b64Data);
const byteNumbers = new Array(byteChars.length);
for (let i = 0; i < byteChars.length; i++) {
byteNumbers[i] = byteChars.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], { type: 'application/pdf' });
window.navigator.msSaveOrOpenBlob(blob);
const url = window.URL.createObjectURL(blob);
anchorTag.href = url;
anchorTag.click();
} else {
// Do PDF stuff in Chrome, Firefox, Edge, etc
const decoded = 'data:application/pdf;base64,' + b64Data;
anchorTag.href = decoded;
anchorTag.click();
}
}