ただし、ブラウザーによる制限があるため、多くの場合、リンクを提供し、ユーザーがクリックして開く -> 名前を付けて保存することしかできません。次のリンクなど:
ユーザーがこのリンクをクリックすると、ブラウザが開き、リンクが指すファイルのコンテンツが表示されますが、これは明らかにニーズを満たしていません。 HTML5 では、a タグに download 属性が追加され、この属性が存在する限り、リンクをクリックすると、ブラウザーはリンクが指すファイルを開かず、代わりにダウンロードします (現在、Chrome、Firefox、および 3 つでのみサポートされています)。オペラ)。
ダウンロードする場合、リンクの名前がファイル名として直接使用されますが、ダウンロードするファイル名を追加するだけで変更できます (download="not-a-file.js" など)。
しかし、これだけでは十分ではありません。上記の方法は、ファイルがサーバー上にある場合にのみ使用できます。ブラウザ側で js によって生成されたコンテンツをブラウザにダウンロードさせたい場合はどうすればよいでしょうか?
実際、それを行う方法はまだあります。DataURI という言葉を聞いたことがある人は多いと思います。
aLink.href = "data:text/plain," content;
}
しかし、上記の方法には 2 つの欠点があり、多くの怠け者の女の子が失われることになります。
ダウンロードするにはもう一度クリックする必要があり、面倒です。
ファイルの種類の問題を解決するには、ブラウザの新しい API (URL.createObjectURL) を使用します。通常、画像の作成には URL.createObjectURL が使用されます。ファイルをダウンロードするには、ブラウザを使用してファイルの種類を設定します。
ここで、ファイル タイプの制限の問題を解決するには、コンテンツを含む ObjectURL を作成し、それを aLink に割り当てるだけです。
ファイルの自動ダウンロードも非常に簡単です。UI クリック イベントを自分で作成し、それを自動的にトリガーして自動ダウンロードを実現できます。
var blob = new Blob([content]);
var evt = document.createEvent("HTMLEvents");
evt.initEvent ("click", false, false);//最後の 2 つのパラメーターを指定しない initEvent は、FF でエラーを報告します。フィードバックをくださった Barret Lee に感謝します。
aLink.download = fileName;
aLink.href = URL。 createObjectURL( blob);
aLink.dispatchEvent(evt);
}
注: 現在 (2014-01)、Blob と URL.createObjectURL は標準ブラウザーでプライベート プレフィックスを追加する必要がなくなったので、安心して使用できます~~ 心配な場合は、「使用できますか?」を確認してください。