2010-10-23 11 views
7

Devo consentire all'utente di scaricare un file creato al volo da alcuni dati contenuti nell'estensione, ma non voglio farlo dal lato server .Estensione per Chrome: scarica/esporta contenuti creati "al volo"

Come esempio del mondo reale: esiste una variabile contenente il testo "ciao mondo". Voglio che l'utente sia in grado di scaricare/creare un file .TXT contenente tale testo.

È possibile?

-edited 30 ott 2010-

Solutions finora:

window.saveAs - non funziona affatto

createObjectURL - funziona, ma il nome del file e altre opzioni possono 'essere personalizzato ancora

copiare i dati negli appunti - funziona, ma troppi passaggi sono necessari per l'utente

creare un documento GoogleDocs - potrebbe funzionare, ma ha bisogno di fare scherzi con l'API e Oauth

-edited Apr 15, 2011

sembra che le cose stanno migliorando: https://github.com/eligrey/FileSaver.js

Ma Chrome 14+ è ancora un po 'strano sui nomi dei file.

+0

Ehi, hai scoperto come si fa? – SLearner

+0

Penso che il modo più semplice e attualmente più moderno sia descritto qui: http://stackoverflow.com/a/27928869/193017 –

risposta

2

Penso che l'unico modo è di richiamare la finestra di dialogo di salvataggio tramite flash, vedere la libreria Downloadify.

+0

Poche ore fa non avevo idea di come gestire questo, e ora ho già due modi, grazie! – Omiod

+0

Ho finalmente testato Downloadify, e non funziona a causa della sandbox di sicurezza flash. From the docs: "** Importante: il file SWF è stato compilato solo per uso online. I test dal percorso del file (cioè file: //) non funzioneranno in quanto violano la sandbox di sicurezza. **" II non posso usare anche l'opzione Blob, poiché funziona solo con le ultime versioni di Chrome Dev, quindi per ora non posso fornire alcuna funzione di esportazione agli utenti dell'interno ... :( – Omiod

+0

L'ultima copia di Downloadify è disponibile su Web Archivio: https://web.archive.org/web/20101023200441/http://downloadify.info/ che a sua volta si riferisce a https://github.com/dcneiner/Downloadify –

1

Non credo che questo è possibile a causa di motivi di sicurezza

+0

Questa è un'aringa di sicurezza.Non è possibile che sia meno sicuro rispetto al download di alcuni binari arbitrari da un server remoto (che è universalmente consentito) – Cuadue

2

Negli cromo estensioni di Google I gruppo hanno trovato questo esempio di lavoro: (ho modificato per lavorare dal pop-up)

BuiltBlob = new BlobBuilder(""); 
BuiltBlob.append("Hello, world"); 
BlobToSave = BuiltBlob.getBlob(); 
chrome.tabs.create({'url': createObjectURL(BlobToSave), 'selected': false}); 

Ma il nome del file non è impostato, per finire con qualcosa come cf8a56bf-d724-4b97-b10f-e252961135bd

Sulle la documentazione W3C (http://dev.w3.org/2009/dap/file-system/file-writer.html) ho trovato questo non funziona esempio:

var bb = new BlobBuilder(); 
bb.append("Lorem ipsum"); 
var fileSaver = window.saveAs(bb.getBlob(), "test_file"); 
fileSaver.onwriteend = myOnWriteEnd; 

ma window.saveAs non sembra esistere.

Googleing around Ho trovato riferimenti Google Gears obsoleti, ma nient'altro, forse perché ho a che fare con qualcosa di troppo nuovo per avere una documentazione adeguata?

C'è un modo per impostare il nome file/mime al primo esempio?

+0

Bene, HTML5 non è ancora finito come una specifica ancora, figuriamoci pronto per un'implementazione su vasta scala sul web. Sfortunatamente, HTML5 è "la prossima grande cosa" un po 'troppo presto. Non è sorprendente che lo scrittore di file non funzioni ancora. Puoi sempre controllare HTML5test per vedere ciò che il tuo browser supporta finora. – Xorlev