8

この HTML 要素をいくつかのページに挿入したい:

<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 を変更すると、この要素をページの dom に含めると、うまく機能します!
しかし、Gmail ページで同じことをすると、生成されたファイルの名前は " somedata.csv" ではなく、拡張子が失われます " csv" !

これをローカル ファイル、localhost にアップロードされたファイル、および多くの外部 Web サイト ページで試してみましたが、Gmail ページを除くすべてで機能します。

Gmail ページで機能しないのはなぜですか? そして、これを修正する方法は?

4

2 に答える 2

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"});
于 2012-12-18T10:47:07.060 に答える
3

JQuery を使用した Chrome では、次のアプローチを試します。

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

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

于 2013-07-26T05:27:32.033 に答える