2012-12-17 6 views
8

voglio inserire questo elemento HTML in alcune pagine:La proprietà di download dell'ancora non funziona su alcune pagine (Gmail)?

<a download="somedata.csv" 
    id="downloadLink" 
    href="data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333" 
> 
    Click Me 
</a> 

in tutte le pagine, quando cambio la dom tramite plugin o manualmente elementi ispettore, per includere questo elemento dom della pagina, funziona benissimo!
Ma, se faccio lo stesso nelle pagine di Gmail, il file generato non è denominato "somedata.csv" e l'estensione è persa "csv"!

ho provato questo nel file locale, nel file caricato su localhost, e in molte pagine del sito esterni, funziona in tutti tranne per le pagine di Gmail.

Perché non funziona nelle pagine di Gmail? E come risolvere questo?

+0

In base a questa pagina l'estensione si estende alla fine dell'href non all'interno della proprietà download: http://davidwalsh.name/download-attribute –

+0

Ma il valore di href, nel mio caso, non è un file di dati. –

+0

è lo stesso problema anche sulle pagine di Facebook, l'attributo download filename viene ignorato – user280109

risposta

5

Per coloro che sono interessati, ho risolto utilizzando Javascript/Ajax, ecco la soluzione:

Qui sta la funzione:

var downloadDataURI = function($, options) { 
    if(!options) 
     return; 
    $.isPlainObject(options) || (options = {data: options}); 
    if(!$.browser.webkit) 
     window.location = options.data; 
    options.filename || (options.filename = "download." + options.data.split(",")[0].split(";")[0].substring(5).split("/")[1]); 
    options.url || (options.url = "http://download-data-uri.appspot.com/"); 
    $('<form method="post" action="'+options.url+'" style="display:none"><input type="hidden" name="filename" value="'+options.filename+'"/><input type="hidden" name="data" value="'+options.data+'"/></form>').submit().remove(); 
} 

Ed ecco come chiamarlo:

downloadDataURI($, {filename: "test.csv",data:"data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333"}); 
+1

nomefile non è rispettato né da firefox su ubunto né da firefox su win8 –

+1

Non funziona in IE10. '$ .browser.webkit' non è vero, quindi' window.location' è impostato, e IE visualizza 'La pagina Web non può essere visualizzata'. –

2

In Chrome con JQuery, provo questo approccio:

var dataUri = "data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333" 
var filename = "somedata.csv" 

$("<a download='" + filename + "' href='" + dataUri + "'></a>")[0].click(); 

Ho creato un collegamento temporaneo e attivato l'evento click su di esso. ma non sono sicuro che altri browser funzionino o meno.

+1

Funziona alla grande in Chrome. Sei riuscito a trovare una soluzione per firefox? – Owen

+0

l'aggiunta al corpo risolve il problema su firefox, vedere https://stackoverflow.com/questions/27814048 – Kokizzu

Problemi correlati