当通过数据网址显示pdf时,firefox会挂起

时间:2017-08-09 08:53:38

标签: firefox jspdf pdf.js data-uri

我有一个使用jspdf在浏览器中创建pdf的应用。我想在另一个标签/窗口中显示这个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位MacO)上运行不正常。窗户挂起。

1 个答案:

答案 0 :(得分:0)

原因是PDF.js(第331行)尝试从网址中提取建议的文件名。此正则表达式根据dataurl挂起。

解决方法是在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内置查看器不支持指定的名称