2013-08-13 14 views
6

Ho bisogno di una pagina HTML per accedere ai file di Google Drive con XMLHttpRequest (XHR) in Javascript senza autenticazione (quindi i miei utenti non devono essere connessi con o avere un account Google). Questi file hanno il permesso "Chiunque abbia un link". Poiché questi file sono aperti per il mondo (con il collegamento), non vedo perché sarebbe un problema consentire la condivisione delle risorse di origine incrociata (CORS) per loro.Come posso accedere a un file pubblico di Google Drive tramite XHR (CORS) senza autenticazione?

L'downloadUrl richiede l'autenticazione, quindi suppongo che non sia un'opzione valida. Ho anche guardato lo webViewLink, che credo richieda che i file siano "Pubblici sul web" - che si presentano nei motori di ricerca, ecc., Credo. Anche per me non è un'opzione praticabile. Ho bisogno dell'autorizzazione "Chiunque abbia il collegamento" per questi file. Il collegamento più promettente è il webContentLink, che in base a http://googleappsdeveloper.blogspot.se/2012/08/5-things-you-didnt-know-you-could-do.html consente l'accesso pubblico e non autenticato.

Il problema che ho con webContentLink è che non sembra essere CORS friendly. I miei tentativi con XHR in Chrome falliscono (abbastanza silenziosamente). Non aggiungo intestazioni.

I miei tentativi con curl utilizzando --header "Origin: http://www.hello.se" e sia con che senza --header "Access-Control-Request-Method: GET" risultati in una HTTP/1.1 302 Moved Temporarily reindirizzare a un URL contenuto di breve durata. Il problema è che la risposta di reindirizzamento non ha segni di intestazione Access-Control-Allow-Origin, necessaria per abilitare CORS.

C'è qualcosa che posso fare in modo diverso per farlo funzionare?

In caso contrario, il team di Google SDK può rendere il CORS compatibile con webContentLink per i file pubblici (che non richiedono l'autenticazione dei cookie), per favore?

+0

* "(...) In caso contrario team di Google SDK, si può fare (...)" * non sarei sorpreso se ha risposto alla domanda, ma penso che aspettarsi che lo facciano qui è piuttosto un'ipotesi. Il tuo suggerimento verrà più probabilmente ascoltato da loro se lo comunichi tramite i canali di Google. – Renan

+0

@ Renan Ho visto sviluppatori di Google rispondere a e risolvere problemi sollevati su SO prima. Quindi non è impossibile :) – idbehold

+0

@ Renan Guardando https://developers.google.com/drive/support, mi sembra di essere nel posto giusto. – Anders

risposta

0

Si potrebbe provare a utilizzare il client API JS di Google. Ottiene la restrizione CORS scaricando un iframe proxy.

1

JSONP sembra essere l'unico modo per recuperare dinamicamente google fogli dal client:

1) In Google Drive, pubblicare sul web le opzioni di condivisione set di documenti & al pubblico

2) Esportare il dati in formato JSON con un collegamento di tipo JSON, avrà il seguente aspetto: "http://spreadsheets.google.com/feeds/list/YOUR_FILE_ID/od6/public/values?alt=json&callback=myCallback". Devi aggiungere & callback = myCallback per usare JSONP. Puoi usare jQuery per effettuare la tua chiamata JSONP.

3) definire una funzione window.myCallback JS di utilizzare i dati

Problemi correlati