2012-12-17 13 views
8

は、私はいくつかのページでは、このHTML要素を挿入したい:私はプラグインを介して、または手動で要素インスペクタでDOMを変更すると、すべてのページでアンカーのダウンロードプロパティが一部のページ(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> 

は、ページのDOMに、この要素が含まれるように、それは素晴らしい作品!
Gmailページで同じ操作を行うと、生成されたファイルの名前は「somedata.csv」でなく、拡張子は「csv」です。

ローカルファイル、ローカルホストにアップロードされたファイル、これは多くの外部ウェブサイトのページでこれを試しましたが、Gmailのページを除いてすべて動作します。

なぜGmailページでは機能しませんか?そしてこれを修正する方法は?興味がある人のために

+0

extenstionは、ダウンロードプロパティ内のhrefの最後ではありません:http://davidwalsh.name/download-attribute –

+0

しかし、私の場合、hrefの値はデータではありません。 –

+0

Facebookページでも同じ問題です。ダウンロードファイル名の属性は無視されます。 – user280109

答えて

5

、私はJavascript/Ajaxのを使用して、それを解決し、ここでのソリューションです:

ここでは、関数の:

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

そして、ここではそれを呼び出す方法は次のとおりです。

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

ファイル名はubuntoではfirefoxもwin8ではfirefoxでも受け入れられません。 –

+1

IE10では動作しません。 '$ .browser.webkit'は真ではないので、' window.location'が設定され、IEは 'Webページを表示できません'と表示します。 –

2

ChromeでJQueryを使用する場合、この方法を試してみます:

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

私は一時リンクを作成し、クリックイベントをトリガーしました。 他のブラウザが動作しているかどうかはわかりません。

+1

Chromeでうまくいきます。あなたはfirefoxのための解決策を見つけることができましたか? – Owen

+0

ボディに追加するとfirefoxに関する問題が解決されます。https://stackoverflow.com/questions/27814048を参照してください。 – Kokizzu

関連する問題