通过数据显示 pdf 时 firefox 挂起 url

firefox hangs when displaying a pdf via data url

我有一个使用 jspdf 在浏览器中创建 pdf 的应用程序。我想在另一个 tab/window.

中显示此 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)上运行不正常。 window 挂起。

原因是 PDF.js(第 331 行)试图从 url 中提取建议的文件名。此正则表达式挂起取决于数据url.

解决方案是在 datauri 字符串中指定一个名称,以便始终找到可接受的名称,如 Is there any way to specify a suggested filename when using data: URI?

的评论 1 中所述
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 的内置查看器不支持指定的名称