我正在使用对 perl 脚本的 JAX 调用,该脚本返回 pdf 的 base64,但它在 IE 中给我带来了麻烦。最终我想解码 base64 数据并创建一个用于 PDFJS 的 blob。它使用以下代码在 chrome/firefox 中工作:
$.ajax({
url: '/path/to/my.cgi',
type: "POST",
data: opts,
async: false,
success: function(data){
var byteChars = atob(data);
var byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++){
byteNumbers[i] = byteChars.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf;base64" });
var url = URL.createObjectURL(blob);
}
});
然而,它永远不会过去 var byteChars = atob(data)
。我的印象是它应该在 >IE10 中工作,但我只是继续前进并决定尝试这个问题的代码。由于某种原因,它正在用一些中文/普通话字符解码base64。下面分别是 IE11 和 chrome 的结果:
我已经从其他位置尝试过 base64 脚本,例如this,但在 IE 中的结果总是相同的。这不允许 PDFJS 正确加载 blob。
如果有人能提供一些启示,我将不胜感激。这是我拥有的最新代码:
$.ajax({
...
success: function(data){
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
var byteChars;
if(userAgent.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident/)){
// You can use either link I provided for this Base64.decode()
byteChars = Base64.decode(data);
} else {
byteChars = atob(data);
}
var byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++){
byteNumbers[i] = byteChars.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf;base64" });
var url = URL.createObjectURL(blob);
}
});