Обычная стратегия блокировки всплывающих окон в браузерах заключается в том, что любое новое окно или вкладка должны открываться как прямой результат взаимодействия с пользователем. Поскольку ваш обработчик событий щелчка инициирует асинхронный процесс, и вы не открываете новое окно до тех пор, пока оно не разрешится, это означает, что браузер заблокирует его, потому что между взаимодействием пользователя и window.open()
.
* прошло слишком много времени. 1003 * Самый простой способ исправить это - просто открыть окно перед тем, как вы начнете читать данные, а затем записать его, как только вы будете готовы. Примерно так должно работать:
if (!isNaN(pdfID)) {
const pdfWindow = window.open('about:blank');
// Firing the request to the BE
axios.post(serverUrl + '/api/user/bill/' + pdfID, postBody, postHeader)
.then((response) => {
// If there is blob data with the PDF, we show it
if (response.data.byteLength > 0) {
// We create a file from the blob
const file = new Blob([response.data], {
type: 'application/pdf'
});
const objectUrl = URL.createObjectURL(file);
pdfWindow.document.location.href = objectUrl;
Вы также можете использовать страницу c в качестве заполнителя вместо about:blank
, например, страницу, которая просто отображает сообщение, например Loading...
.
Я не уверен, как справиться с этой window.navigator.msSaveOrOpenBlob
вещью, поскольку я совсем не знаком с ней.