web-dev-qa-db-ja.com

chrome新しいバージョンでwindow.openを使用してbase64 pdfデータを表示

新しいウィンドウでPDFとしてbase64データを開くために次のコードを使用しています

var pdf=response.data.base64;       
var doc = document.createElement("a");
doc.href ='data:application/octet-stream;base64,' + pdf;
doc.target = "blank";
doc.click();
$window.open('data:application/pdf;base64,' + pdf);

これはchromeバージョン56.0.2924.87では正常に機能しますが、バージョン61.0.3163.100では機能しません[スクリーンショットを参照]
サンプルプランカーコード

enter image description here

4
var pdfResult = data_.data.info.result.result;

let pdfWindow = window.open("")
pdfWindow.document.write("<iframe width='100%' height='100%' src='data:application/pdf;base64, " + encodeURI(pdfResult) + "'></iframe>")

これは、ブラウザーのタブにbase64 pdfを表示するのに役立ちます。

10
harold

AngularJSを使用して同様の問題に直面しました。これは私が管理した方法であり、私の場合、ファイルをURLからarraybufferとしてロードします。それが役に立てば幸い。

$http({
    method: 'GET',
    url: '/api/transaction-file/'+id,
    responseType:'arraybuffer'
}).then(function(response){
    var file = new Blob([response.data], {type: 'application/pdf'});
    var fileURL = URL.createObjectURL(file);
    window.open(fileURL);
}, function(response){
    //Error
});
4
kleiser sarifo

私にはあまりにも問題があり、私の友人ペトルスとの私の解決策は:

const win = window.open("","_blank");
let html = '';

html += '<html>';
html += '<body style="margin:0!important">';
html += '<embed width="100%" height="100%" src="data:application/pdf;base64,'+base64+'" type="application/pdf" />';
html += '</body>';
html += '</html>';

setTimeout(() => {
  win.document.write(html);
}, 0);
2
Thiago Queiroz