Chrome打包应用程序中的jspdf:document.writeln()不可用

时间:2016-06-29 12:32:42

标签: javascript jquery google-chrome-app jspdf

我正在开发Chrome应用,我希望允许用户以PDF格式导出一些HTML表格。 我做了一些研究,我发现jsPdf是我需要的插件。 现在是我的问题。 jsPDF及其功能“fromHTML”使用Chrome Packaged App中没有的“document.writeln()”方法。

“未捕获的错误:document.writeln()在打包的应用中不可用。”

Console error as jspdf tries to use document.writeln()

我已经在互联网上进行了大量研究,发现有一些方法可以通过添加一些“document.create”来解决这个问题。但是虽然我不知道jspdf是如何工作的,但我真的不知道要创建什么。

jspdf中有一部分导致了这个问题:

VkGraphicsPipelineCreateInfo

这是我对jspdf库的调用,也许我在这里犯了一个错误:

var $frame, $hiddendiv, framename,  visuallyhidden;

framename = "jsPDFhtmlText" + Date.now().toString() + (Math.random() * 1000).toFixed(0);

visuallyhidden = "position: absolute !important;" + "clip: rect(1px 1px 1px 1px); /* IE6, IE7 */" + "clip: rect(1px, 1px, 1px, 1px);" + "padding:0 !important;" + "border:0 !important;" + "height: 1px !important;" + "width: 1px !important; " + "top:auto;" + "left:-100px;" + "overflow: hidden;";

$hiddendiv = document.createElement('div');
$hiddendiv.style.cssText = visuallyhidden;
$hiddendiv.innerHTML = "<iframe style=\"height:1px;width:1px\" name=\"" + framename + "\" />";
document.body.appendChild($hiddendiv);

$frame = window.frames[framename];
$frame.document.open();
$frame.document.writeln(element);//This causes "Uncaught Error: document.writeln() is not available in packaged apps."
$frame.document.close();
return $frame.document.body;

我将继续我的研究,但我现在真的失去了安全,我真的需要你的帮助!

我可能忘记说一些事情,只是让我知道,我会尽快修复它。

非常感谢!

1 个答案:

答案 0 :(得分:0)

经过多次研究和一些rageQuits我找到了解决方案。我不知道它为什么会起作用,但确实如此,我会在这里分享一下,以防你们中的一个遇到这个问题。 我想这更像是一个技巧/黑客,而不是一个真正的解决方案。

取而代之:

doc.fromHTML($('#month').html(),15,15 ,{
    width:600,
    elementHandler:specialElementHandlers
});
doc.save('Tst.pdf');

由此:

doc.fromHTML($('#month')[0],15,15 ,{ //ONLY CHANGE IS HERE
    width:600,
    elementHandler:specialElementHandlers
});
doc.save('Tst.pdf');

会奏效。不再生成错误并将pdf成功下载到本地文件。

如果有人知道为什么会这样,我会很乐意学习,因为这很不好意思。

希望有一天能帮助somne​​one,

非常感谢'n'以后再见!