【发布时间】:2016-08-15 06:34:45
【问题描述】:
必须有一种方法可以更有效地做到这一点。我所做的在概念上非常简单:
1) 调用 Web 服务并接收 PDF blob 的 b64 编码字符串。
2)解码它,创建blob,在新窗口中渲染PDF。弹出窗口拦截器帐户。
我的代码有效。没有什么花哨。它的所有客户端。一切正常,但与其他浏览器相比,IE 运行速度非常慢(IE 11 与当前的 Chrome/Firefox/Safari)。
鉴于此,我确信我可以更有效地做到这一点。有关如何加快 IE 11 的任何提示?
注意:我正在使用 Jeremy 的 b64toBlob 函数(感谢 Jeremy)。
第一部分:模态的东西
var box = new SimpleDialog(Dialogs.getNextId(), false);
box.title = "Fetching PDF";
box.isMovable = false;
box.extraClass = "";
box.width = 400;
box.isModal = true;
box.createDialog();
window.parent.box = box;
box.setContentInnerHTML('<p>Please wait....</p>');
box.show();
第二部分:调用外部服务,接收b64编码字符串
setTimeout(function(){
var response = ... ; //do callout... get data
var statusCode = ...; //parse from response
var b64Data = ... ; //parse from response
if(statusCode == 200) {
//Account for IE
if (navigator.appVersion.toString().indexOf('.NET') > 0) {
var blob = b64toBlob(b64Data, "application/pdf");
var fileURL = URL.createObjectURL(blob);
window.navigator.msSaveOrOpenBlob(blob, "theFile.pdf");
window.parent.box.cancel();
} else {
var blob = b64toBlob(b64Data, "application/pdf");
var fileURL = URL.createObjectURL(blob);
var pdfWin = window.open(fileURL,"_blank","width=1000,height=800");
if(!pdfWin) {
box.setTitle("Success: PDF has been retrieved");
box.setContentInnerHTML("<p align='left'></p><p align='left'>A popup blocker was detected. The PDF will not open automatically.<br /><br /></p><p align='left'><a onclick='window.parent.box.cancel();' target='_blank' href='"+fileURL +"' >Click here to view .pdf</a><br /><br /></p><p align='center'><button class='btn' onclick='window.parent.box.cancel(); return false;'>Cancel</button></p>");
} else {
window.parent.box.cancel();
}
}
} else {
box.setTitle("Error fetching PDF");
box.setContentInnerHTML("<p align='left'><img src='/img/msg_icons/warning32.png' style='margin:0 5px;'/></p><p align='left'>Unable to retrieve PDF.</p><p align='center'><button class='btn' onclick='window.parent.box.cancel(); return false;'>OK</button></p>");
}
},200);
【问题讨论】:
-
如果我不得不猜测我会说 IE 需要这么长时间的原因是因为 msSaveOrOpenBlob 方法必须在本地保存文件。
-
嗯。你是说 msSaveOrOpenBlob 在呈现其保存或打开对话之前就保存本地了吗?
-
您考虑过使用网络工作者吗?如果您不需要支持版本
标签: javascript internet-explorer pdf character-encoding