6

Sto cercando di creare un'estensione di Chrome che potrebbe (ad esempio) collegarsi a Google Drive, inserire un elemento DOM da qualche parte (ad esempio il "riquadro attività") e visualizzare alcune informazioni aggiuntive quando l'utente seleziona un file.Listener di eventi UI frontend di Google Drive

Presumibilmente Google Drive utilizza un tipo di modello di interfaccia utente basato su eventi, ad es. "quando l'utente fa clic sull'immagine di anteprima per questo file, carica i dettagli di" Attività "per quel file e li visualizza nel riquadro. Tuttavia, sembra che nulla di tutto ciò sia documentato da nessuna parte (e ovviamente Google ne offusca il Javascript sul lato client) .

c'è una sorta di API pubblica per questi eventi che posso collegare in per eseguire i callback Qualcosa come:?

googleDriveUi.on("fileSelect", function(file) { 
 
    alert("You have selected " + file.filename); 
 
});

mi rendo conto che potrei ottenere lo stesso risultato mediante l'attuazione di il mio frontend dell'interfaccia utente e quindi l'aggancio nel Google Drive backend API. Non voglio davvero farlo se è possibile evitarlo: l'interfaccia utente di Google Drive è già abbastanza buona, quindi non è necessario reinventare la ruota.

Un'alternativa sarebbe ascoltare gli eventi di richiesta web. Ad esempio, vedo che quando viene fatto clic su un file in Drive, viene effettuata una richiesta a http: // {google} /appsactivity/v1.1internal/activities? {Etcetc}. Un'estensione può probabilmente ascoltare le richieste fatte a questo URL - ma presumibilmente Google potrebbe cambiare l'endpoint della richiesta specifica in qualsiasi momento, quindi questa sarebbe una soluzione piuttosto traballante.

Qualsiasi altro pensiero sarebbe apprezzato.

+0

quali informazioni è necessario prendere che Drive non sta già fornendo? –

+0

Idealmente potrei tutti i metadati disponibili - ID di file, nomi di file, dimensioni, elenchi di attività, tutto. Il mio approccio ad interim è ascoltare gli eventi click sugli elementi con l'attributo [data-id] (dove il valore dell'attributo è l'ID del file), quindi utilizzare quell'ID per recuperare il file tramite la chiamata API al back Drive. fine. Il problema con questo approccio è che (1) non è documentato, quindi Google potrebbe smettere di usare [data-id] che potrebbe interrompere la mia estensione, e (2) funziona solo per ID file, ovvero non posso accedere ad altri metadati senza fare un'altra chiamata API (anche se questo non è un problema enorme). –

risposta

3

Non ci sono API pubbliche per gli eventi dell'interfaccia utente front-end. Alcune opzioni:

A. Il Google Apps Activity API è pubblico e supportato. È possibile ottenere modifiche formalmente facendo richieste lì (supponendo che tu abbia rilevato un file.id da qualche mezzo client, non documentato, traballante).

B. Il "modo giusto" consiste nell'utilizzare l'interfaccia di integrazione di Drive REST API Open Files ("Apri con"), ma questo dipende dall'utente che ha autorizzato/installato/connesso un'applicazione tramite OAuth.

C. Invece di scrivere un'intera interfaccia utente front-end, è sufficiente utilizzare lo Google Picker API. Questo ti darà il pieno controllo di "l'utente ha selezionato file.id = xyz".

L'opzione B o C è la più vicina possibile con le API complete e formalmente supportate.

Se si desidera che Google aggiunga la funzionalità necessaria, è possibile rivedere e/o presentare un file feature request for the Drive API.

+0

Apprezzo la risposta, ma non è proprio quello che sto cercando.Speravo che ci sarebbe stata un'API front-end documentata per interagire con gli elementi di Drive nel DOM * senza * aver bisogno di annusare gli ID dei file e ri-recuperare dal back-end di Drive (che è attualmente quello che sto facendo). Tuttavia, sembra che Google non lo abbia reso disponibile. –

+0

È un peccato che questa limitazione esista, sì. Ho aggiunto alla mia risposta alcune informazioni su come presentare una richiesta di funzionalità. –

+0

Anche se questo non è stato in grado di rispondere alla mia domanda, ti ho comunque assegnato la taglia perché era la risposta più vicina disponibile :) –

Problemi correlati