2012-11-17 13 views
7

Mi sto distruggendo il cervello cercando di capire come scaricare un file da Drive in Internet Explorer. Sembra che i problemi di sicurezza di Cross Domain lo stiano impedendo.Google Drive e CORS Cross Domain Requests

Un semplice 'GET' utilizzando XMLHttpRequest funziona bene in Chrome e Firefox, perché supporta intestazioni di richiesta, che permettono al browser di richiedere una risposta CORS, come mostrato nelle seguenti righe di codice:

var xhr = new XMLHttpRequest(); 
    xhr.open('GET', file.downloadUrl); 
    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); 
    xhr.onload = function() { 
     callback(xhr.responseText); 
    }; 
    xhr.send(); 

IE non supporta le intestazioni delle richieste, presumibilmente per motivi di sicurezza. Senza la possibilità di scaricare contenuti in questo browser sfortunatamente popolare, sono completamente bloccato.

La mia domanda è questa: come sono nel mondo queste altre applicazioni che trattano questo problema? Stanno usando un proxy lato server di qualche tipo e incanalando tutte le richieste di unità attraverso il proprio back-end? Sembra piuttosto arduo a questo punto. Oppure, c'è un modo per accedere al file di guida al momento del lancio, di cui non sono a conoscenza?

Ho visto alcune soluzioni che richiedono file su entrambi i server, che non sono un'opzione per quanto ne so. Google Drive ha la capacità di rispondere con CORS senza l'intestazione della richiesta o esiste un'altra API di cui non sono a conoscenza che supporti una sorta di callback da un iframe nel dominio Drive?

Sono praticamente morto nell'acqua a questo punto. Qualsiasi consiglio sarebbe molto apprezzato. Mi spiace dover chiedere qualsiasi domanda relativa ai prodotti MS.

+0

Hai considerato il client JS per l'API di Drive: http://googleappsdeveloper.blogspot.com/2012/09/introducing-javascript-support-for.html – monsur

+0

Sì, il codice mostrato sopra è stato preso dalla sezione Download. Funziona alla grande in Chrome, Firefox e Safari, non solo in IE. Ho cercato un metodo alternativo, ma non sembra che ci sia un modo per fare l'header auth di CORS all'interno di IE, o un'intestazione dell'intervallo di byte (per un download parziale). – djabraham

+0

Hey Dano64, Se CORS non funziona su IE, vogliamo risolvere questo problema. Potresti farmi sapere esattamente cosa avremmo bisogno di fare su Google per risolvere questo problema per IE? In seguito presenterò un bug al nostro team di esperti e cercherò di ottenere una soluzione rapida. – Nivco

risposta

1

Se il problema è con IE non consente di aggiungere o no passare l'intestazione Authorization, si potrebbe provare che passa il token di accesso utilizzando il parametro access_token URL che ha lo stesso comportamento come il Authorization intestazione:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', file.downloadUrl + '&access_token=' + accessToken); 
xhr.onload = function() { 
    callback(xhr.responseText); 
}; 
xhr.send(); 
+0

Grazie per questo suggerimento. Funziona bene in Chrome. Sta ancora generando un errore in IE, ma ciò potrebbe essere dovuto al fatto che il sito è in esecuzione in http e downloadUrl è sempre https. Installa stasera un certificato di sicurezza e riprovo con una pagina di prova abilitata per https. – djabraham

+0

SUCCESSO! Grazie per l'assistenza. Questo funziona perfettamente in IE ora.Solo per riepilogare le condizioni necessarie per scaricare un elemento di Google Drive in IE: 1) utilizzare XDomainRequest rispetto a XMLHttpRequest in IE. 2) passare il token di accesso nella querystring, come mostrato sopra. 3) utilizzare HTTPS, poiché l'oggetto XDomainRequest non consente la combo con HTTP. Vedere l'articolo di seguito per ulteriori informazioni sui problemi con IE8, IE9 e imminente IE10. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – djabraham