无法打印此文档,它仍在加载 - Firefox打印机错误

时间:2017-06-20 02:54:53

标签: firefox fonts google-font-api google-fonts

我的API生成动态HTML文档并将其转储到弹出窗口中,如下所示:

var popup = window.open('', "_blank", 'toolbar=0,location=0,menubar=1,scrollbars=1');
    popup.document.write(result);

用户审核文档后,他们可以打印出来调用

window.print();

Chrome可以毫无问题地处理它,但Firefox显示打印机错误:

"无法打印此文档,它仍在加载"

打印机窗口仅在我按下Ctrl + R时打开。

看来$(document).ready()永远不会在firefox中发生,并且它一直在等待加载。

弹出窗口中的状态栏显示Read fonts.gstatic.com

以下是文档的简要内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="https://fonts.googleapis.com/css?family=Orbitron|Jura|Prompt" rel="stylesheet"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

<title>Invoice #15001</title>

<style>
...
</style>
</head>
<body>
<div id="invoice_body" >
...
</div><!-- Invoice body -->
</body>
</html>

我觉得它与Google字体有关。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

当你通过&#34;&#34;作为window.open的URL,Firefox加载&#39; about:blank&#39;此时脚本安全性可能会阻止您通过http或https ...

提取外部资源

我能够重现你的问题并在我尝试打印时弹出同样的错误 - 我在调用window.open时能够通过使用数据URL来使其工作...

根据您的示例,result是一个包含弹出窗口HTML的字符串,因此您可以像这样调用window.open,并且不再使用document.write:

var popup = window.open("data:text/html;charset=utf-8,"+result, "printPopup", "toolbar=0,location=0,menubar=0,scrollbars=1");

我测试了这个,result是一个包含以下内容的字符串:

<html><head>
<link rel="stylesheet"href="https://fonts.googleapis.com/css?family=Tangerine">
<style> body { font-family: 'Tangerine', serif; font-size: 48px; } </style>
<title>Test</title></head>
<body>
<div>Testing testing</div>
<div><a href="javascript:window.print()">Print</a></div>
</body>
</html>

点击打印链接按预期工作......

答案 1 :(得分:0)

我不得不加倍努力,但是:

我添加了服务器端代码,用于保存html文件并传递指向该文件的链接而不是html内容:

ob_start();
include('ezts_invoice_template.php');
$dom = ob_get_clean();
$ezts_file_path = EZTS_PLUGIN_PATH.'kernel/tmp/'.session_id().'_tmp.html';
$ezts_file = fopen($ezts_file_path, 'w+');
$result = fwrite($ezts_file, $dom);
fclose($ezts_file);
print_r('{"result":"success", "file":"'.plugin_dir_url(__FILE__).'tmp/'.session_id().'_tmp.html"}');

在JS中我通过PHP传递的链接打开一个弹出窗口:

var popup = window.open(result.file, "_blank", 'toolbar=0,location=0,menubar=0,scrollbars=1');

最后,在模板文件中,我添加了事件监听器,以便在窗口关闭时请求删除临时文件

window.addEventListener('beforeunload', function(event) {

    window.opener.eztsApiRequest('deleteTempFile', 
                                 '', 
                                 function(result, status){ console.log(result); });

}, false);

这并不容易,但效果很好。