2017-02-05 15 views
0

私は、アドレスでXMLファイルをダウンロードできるボタンが付いたページを持っています。ボタンに接続されているjsのコードだった冒頭 :開いている代わりにXMLをダウンロード

function downloadURI(uri, name) { 
    window.location = uri; 
} 

しかし、すべてのブラウザでは、ファイルの代わりに、ダウンロードそれを開きました。次に、私はこのコードで試しました:

function downloadURI(uri, name) { 
    var link = document.createElement("a"); 
    link.download = name; 
    link.href = uri; 
    link.click(); 
} 

これはIE、Edge、Opera、Chromeでは動作しますが、Firefoxでは動作しません。誰も私がそれを解決するのを助けることができる?

答えて

1

Firefoxは、ドキュメントにないリンクのクリックが好きではありません。例えばのでdocument.bodyへのリンクを追加(または何でも)link.clickコールする前に(そしておそらく小さなsetTimeout遅延の後に、後でそれを削除):

function downloadURI(uri, name) { 
    var link = document.createElement("a"); 
    link.download = name; 
    link.href = uri; 
    document.body.appendChild(link); 
    link.click(); 
    setTimeout(function() { 
    documet.body.removeChild(link); 
    }, 50); 
} 

それはあなたの設定で動作しない場合は、私はこれを確実にやったのは、ユーザーがボタンではなくリンクをクリックし、リンクターゲットをiframeの名前で隠してリンクリクエストへの応答にContent-Disposition: attachment; filename=fooヘッダーが含まれていることです。オープンではなくダウンロードする。

+1

クリックのイベントリスナーを設定し、そのイベントリスナー内で削除するだけです。 –

+1

@ibrahimmahrir:私の経験では、それは早すぎます。上記の操作は、クリックのデフォルトアクションが既に開始されている場合に行います。 –

関連する問題