функция не работает с использованием window.location.href - PullRequest
0 голосов
/ 21 июня 2019

Функция html2pdf(element) (генерирует pdf страницы) работает нормально.После выполнения функции я хочу перейти на другую страницу.В моем случае при добавлении window.location.href[...] страница просто перенаправляется на следующую страницу, но функция html2pdf больше не работает.

<script>
  $(function() {});
  function printPDF() {
    var element = document.getElementById("element-to-print");
    var opt = {
      margin: 1,
      filename: "EFS10Laptop.pdf",
      image: { type: "jpeg", quality: 1.98 },
      html2canvas: { scale: 2 },
      jsPDF: { unit: "in", format: "letter", orientation: "portrait" }
    };

    // New Promise-based usage:
    //html2pdf().from(element).set(opt).save();
    html2pdf(element);
    window.location.href = "index.php";
  }
</script>

1 Ответ

0 голосов
/ 22 июня 2019

Ankur был прав - html2pdf, используемый с или без его API, основанного на обещаниях, является асинхронным по своей природе, поэтому он не остановит ваш код от продолжения, пока он обрабатывает запрос, и поскольку установка window.location.hrefПрактически мгновенно, перенаправление достигается до того, как html2pdf сможет завершиться.

Поскольку html2pdf имеет API, основанный на обещаниях, этого очень легко избежать - просто подождите, пока обещание сохранения не разрешится, чтобы перенаправить, вот так:

html2pdf().from(element).set(opt).save().then(()=>{
    window.location.href = "index.php";
});

Обратите внимание, что это все еще перенаправляет пользователя, пока диалог сохранения все еще открыт.Я не вижу обещания, когда оно закрыто в документации (возможно, потому что сторона JS не знает об этом), но это не мешает html2pdf работать после генерации файлаBLOB-объект появляется перед перенаправлением страницы.

...