Новая вкладка Firefox останавливается в «неинициализированном» при загрузке BLOB-URL - PullRequest
0 голосов
/ 07 мая 2019

У меня есть скрипт, который генерирует 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-объект загружается, как ожидается, и все продолжается.

Что вызывает зависание новой вкладки в неинициализированном состоянии? Как я мог это исправить или предотвратить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...