在将blob url放入窗口之前必须打开新窗口:
let newWindow = window.open('/')
您还可以使用其他页面,如 /loading ,带有加载指示器 .
然后你需要等待newWindow加载,你可以在这个窗口中推送你的blob文件的url:
newWindow.onload = () => {
newWindow.location = URL.createObjectURL(blob);
};
Adblock扩展程序不会阻止它 .
我正在使用AJAX和ES生成器,如下所示:
let openPDF = openFile();
openPDF.next();
axios.get('/pdf', params).then(file => {
openPDF.next(file);
});
function* openFile() {
let newWindow = window.open('/pages/loading');
// get file after .next(file)
let file = yield;
// AJAX query can finish before window loaded,
// So we need to check document.readyState, else listen event
if (newWindow.document.readyState === 'complete') {
openFileHelper(newWindow, file);
} else {
newWindow.onload = () => {
openFileHelper(newWindow, file);
};
}
}
function openFileHelper(newWindow, file) {
let blob = new Blob([file._data], {type: `${file._data.type}`});
newWindow.location = URL.createObjectURL(blob);
}