2012-12-17 10 views
8

chcę wstawić ten element HTML w niektórych stronach:Usługa pobierania kotwicy nie działa na niektórych stronach (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> 

We wszystkich stron, kiedy zmienić DOM za pomocą wtyczki lub ręcznie w elementach inspektora, aby zawierać ten element do Dom Page'a, działa świetnie!
Ale jeśli zrobię to samo na stronach Gmaila, wygenerowany plik nie będzie miał nazwy "somedata.csv", a rozszerzenie zostanie utracone "csv"!

Próbowałem tego w pliku lokalnym, w pliku przesłanym do hosta lokalnego, a na wielu zewnętrznych stronach serwisu działa on na wszystkich stronach oprócz Gmaila.

Dlaczego to nie działa na stronach Gmaila? I jak to naprawić?

+0

Zgodnie z tą stroną rozszerzenie występuje na końcu href nie w obrębie właściwości pobierania: http://davidwalsh.name/download-attribute –

+0

Ale wartość href, w moim przypadku, to dane nie plik. –

+0

to jest ten sam problem na stronach Facebooka, atrybut file download jest ignorowany – user280109

Odpowiedz

5

Dla tych, którzy są zainteresowani, I rozwiązać go za pomocą JavaScript/Ajax, oto rozwiązanie:

oto funkcja:

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(); 
} 

A oto jak to nazwać:

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

nazwa pliku nie jest honorowana ani przez firefox na ubunto ani firefox na win8 –

+1

Nie działa w IE10. '$ .browser.webkit' nie jest prawdą, więc ustawione jest' window.location', a IE wyświetla "Strona internetowa nie może być wyświetlana". –

2

W przeglądarce Chrome z JQuery próbuję tego podejścia:

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(); 

Utworzono łącze tymczasowe i uruchomiono zdarzenie kliknięcia. , ale nie wiem, czy działają inne przeglądarki.

+1

Działa wspaniale w Chrome. Czy udało ci się znaleźć rozwiązanie dla firefox? – Owen

+0

dołączenie do ciała rozwiązuje problem na firefox, zobacz https://stackoverflow.com/questions/27814048 – Kokizzu

Powiązane problemy