È possibile effettuare la richiesta in javascript, impostando le intestazioni che si desidera. Quindi puoi URL.createObjectURL()
, per ottenere qualcosa adatto allo src
dell'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 :(');
}
}
}
Il tipo MIME della risposta viene mantenuto. Quindi se ottieni una risposta HTML, l'html verrà mostrato nell'iframe. Se hai richiesto un pdf, il browser visualizzatore pdf eseguirà l'iframe.
Se questo fa parte di un'app lato client di lunga durata, è possibile utilizzare URL.revokeObjectURL()
per evitare perdite di memoria.
Gli URL degli oggetti sono anche piuttosto interessanti. Sono nella forma blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
. Puoi effettivamente aprirli in una nuova scheda e vedere la risposta, e vengono scartati quando il contesto che li ha creati è chiuso.
Ecco un esempio completo: https://github.com/courajs/pdf-poc
Hi Niet, Si può fornire il codice di esempio nella realizzazione JSFiddle –
Credo Niet significa qualcosa come questo http://stackoverflow.com/a/17695034/1524918 –
Wouldn la richiesta in tale script di precaricamento deve essere inviata a un dominio diverso e quindi violare la stessa politica di origine? – mart1n