Możesz wysłać żądanie w javascript, ustawiając dowolne nagłówki. Wtedy możesz URL.createObjectURL()
zdobyć coś odpowiedniego dla src
elementu iframe.
var xhr = new XMLHttpRequest();
xhr.open('GET', 'page.html');
xhr.onreadystatechange = handler;
xhr.responseType = 'blob';
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
var data_url = URL.createObjectURL(this.response);
document.querySelector('#output-frame-id').src = data_url;
} else {
console.error('no pdf :(');
}
}
}
Zachowywany jest typ MIME odpowiedzi. Więc jeśli otrzymasz odpowiedź HTML, kod HTML zostanie wyświetlony w ramce iframe. Jeśli poprosiłeś o plik PDF, przeglądarka PDF w przeglądarce włączy się do elementu iframe.
Jeśli jest to część długotrwałej aplikacji po stronie klienta, możesz chcieć użyć, URL.revokeObjectURL()
aby uniknąć wycieków pamięci.
Adresy URL obiektów są również całkiem interesujące. Są w formie blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
. W rzeczywistości możesz je otworzyć w nowej karcie i zobaczyć odpowiedź, a zostaną one odrzucone, gdy kontekst, który je utworzył, zostanie zamknięty.
Oto pełny przykład: https://github.com/courajs/pdf-poc