Firefox зависает при отображении pdf через URL-адрес данных

У меня есть приложение, которое создает pdf в браузере, используя jspdf. Я хочу показать этот pdf в другой вкладке/окне.

function open_data_uri_window(url) {
   var html = '<html>' +
     '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>' +
    '<body>' +
    '<p>new viewer</p>' +
    '<iframe type="application/pdf" src="' + url + '"></iframe>' +
    '</body></html>';

  var a = window.open("about:blank", "Zupfnoter");
  a.document.write(html);
  a.document.close();
}

Он отлично работает в chrome (60.0.3112.90), но не в Firefox (54.0.1 64 бит MacOs). Там висит окно.

Ответ 1

Причина в том, что PDF.js(строка 331) пытается извлечь предложенное имя файла из URL-адреса. Это регулярное выражение зависает в зависимости от dataurl.

Решение состоит в том, чтобы указать имя в строке datauri, чтобы всегда было найдено принятое имя, как указано в комментарии 1 к Есть ли способ указать предлагаемое имя файла при использовании данные: URI?

function open_data_uri_window(url) {
   var url_with_name = url.replace("data:application/pdf;", "data:application/pdf;name=myname.pdf;")
   var html = '<html>' +
    '<style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  </style>' +
    '<body>' +
    '<p>new viewer</p>' +
    '<iframe type="application/pdf" src="' + url_with_name + '"></iframe>' +
    '</body></html>';
    var a = window.open("about:blank", "Zupfnoter");
    a.document.write(html);
    a.document.close();
}

Подсказка: указанное имя не соблюдается встроенным просмотрщиком Chrome