2012-11-17 21 views

risposta

14

No, non è possibile. Tuttavia, è possibile impostare l'origine iframe su uno script di preload, che utilizza AJAX per recuperare la pagina effettiva con tutte le intestazioni desiderate.

+3

Hi Niet, Si può fornire il codice di esempio nella realizzazione JSFiddle –

+0

Credo Niet significa qualcosa come questo http://stackoverflow.com/a/17695034/1524918 –

+2

Wouldn la richiesta in tale script di precaricamento deve essere inviata a un dominio diverso e quindi violare la stessa politica di origine? – mart1n

12

È 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

+0

Perfetto. Ha funzionato perfettamente. Grazie. – mike123

+0

tu uomo! Sto lavorando a un componente Angular 5 ispirato a questo codice per mostrare anteprime in formato pdf in Angularjs. questo mi ha aiutato molto – FireDragon

+0

@ FireDragon felice di sentirlo! Collegalo qui se lo apri – FellowMD

Problemi correlati