2017-03-17 27 views
1

我正在開發一個網站,允許用戶下載PDF版的頁面。目前的解決方案是將生成的HTML呈現在服務器上的PDF上,從而返回Base64編碼的PDF。 BLOB是從該數據,接着是的ObjectURL創建如下: -將錨href設置爲在Chrome中使用「_blank」目標的「blob:」URL的問題

const blob = new Blob([B64A.decode(pdfdata)], {type: 'application/pdf'}); 
dataURL = (window.URL || window.webkitURL).createObjectURL(blob); 

dataURL(其形式爲 「斑點:http://www.example.com/abcd1234-abcd-abcd-abcd-abcd1234efa」)然後被分配給HREF屬性的錨標籤。 目標屬性也設置爲「_blank」,以便生成的PDF在新選項卡中打開。

直到大約一個星期前,這工作完全正常。在Firefox中,一切仍然有效,但在Chrome中有問題。點擊鏈接時,快速打開標籤,然後立即關閉。刪除目標屬性會導致一切正常工作,儘管PDF已加載到當前選項卡中,而這不是我想要的。沒有任何東西被記錄到控制檯,所以我沒有從那裏得到任何線索。

有沒有人有任何想法,爲什麼發生這種情況?由於這只是剛剛開始發生,我認爲這是最新版本的Chrome的問題(我在Linux上運行57.0.2987.98(64位),儘管同事在Windows 10上也遇到與Chrome相同的問題)。

編輯: 我剛剛創建了一個CodePen例子來證明這一點:https://codepen.io/anon/pen/OpOGbE

單擊該按鈕,應該生成兩個環節。第一個應該在同一頁面正常打開。第二個在新標籤中打開,但不在Chrome中(對我來說,它顯示與上述相同的行爲)。

在運行這個測試我只注意到在隱身窗口的問題似乎不存在,而新的標籤正確打開...

回答

2

這似乎是在Chrome瀏覽器臨時錯誤。本文編寫的Chrome(v.59.0.3044.1)版本代碼works with current Canary (beta)

作爲臨時解決辦法,你可以嘗試使用原來的Base-64的數據,只是在前面加上一個data-uri頭,然後以此爲源HREF:

const dataURL = "data:application/pdf;base64," + pdfdata; 
+1

這是一個非常不錯的主意,我hadn」沒想到!我可以證實這個問題適用於Chrome中提到的Chrome版本。謝謝! – Polaris64