У меня есть скрипт, который генерирует PDF, он возвращает данные, которые JS использует для создания объекта Blob, который затем используется для отображения PDF в новой вкладке браузера.
DoPDF() {
self = this;
self.timestamp = new Date().toDateString('yyyy-MM-dd HH:mm:ss');
let postData = JSON.stringify(self);
console.log(postData);
let xhr = new XMLHttpRequest(),
newTab = window.open('', '_cert-of-destruct');
xhr.open('POST', 'php/makeCert.php', true);
// xhr.setRequestHeader("Content-Type", "x-www-form-urlencoded");
xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
xhr.send(postData);
xhr.responseType = 'blob';
xhr.onload = function (e) {
if (this.status == 200) {
// Note: .response instead of .responseText
let blob = new Blob([this.response], { type: 'application/pdf' });
function isReady() {
console.log(newTab.document.readyState);
if (newTab.document.readyState === 'complete') {
newTab.location = URL.createObjectURL(blob);
resetUI(false);
}
else {
setTimeout(isReady, 500);
}
}
isReady();
}
};
}
Это хорошо работает во всех браузерах, кроме Firefox. Кажется, что newTab.document.readyState
Firefox никогда не меняется, чтобы завершить. Новая вкладка создается всегда, но readyState остается неинициализированным. Если новая вкладка перезагружена, BLOB-объект загружается, как ожидается, и все продолжается.
Что вызывает зависание новой вкладки в неинициализированном состоянии? Как я мог это исправить или предотвратить?