Vous pouvez effectuer la demande en javascript, en définissant les en-têtes que vous souhaitez. Ensuite, vous pouvez URL.createObjectURL()
pour obtenir quelque chose de convenable pour le src
de l'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) {
// this.response is a Blob, because we set responseType above
var data_url = URL.createObjectURL(this.response);
document.querySelector('#output-frame-id').src = data_url;
} else {
console.error('no pdf :(');
}
}
}
Le type MIME de la réponse est préservé. Ainsi, si vous obtenez une réponse html, le html s'affichera dans l'iframe. Si vous avez demandé un pdf, la visionneuse de pdf du navigateur s'affichera dans la iframe.
Si cette application fait partie d'une application côté client à longue durée de vie, vous voudrez peut-être utiliser URL.revokeObjectURL()
pour éviter les fuites de mémoire.
Les URL des objets sont également très intéressants. Elles sont de la forme blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
. Vous pouvez en fait les ouvrir dans un nouvel onglet et voir la réponse, et ils sont supprimés lorsque le contexte qui les a créés est fermé.
Voici un exemple complet : https://github.com/courajs/pdf-poc