2017-08-24 16 views
2

downloadタグの属性をタグで使用しようとすると、さまざまなブラウザで奇妙な動作が発生しています(hrefdataUrlの場合)。ダウンロード属性とdataUrl hrefを持つ<a>タグの異なる動作?

コードスニペット:

<a href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,UEsDBAoA...Qwwe=" download="testfile.xlsx" ></a> 
<a href="data:image/png;base64,iVBORw...ElFTkSuQmCC" download="testfile.png"></a> 

コンソール出力/挙動:

    タグの

    var a = document.createElement('a'); 
    a.href = [generated dataUrl]; 
    a.download = filename; 
    console.log(a.outerHTML); 
    a.click(); 
    

    サンプルコンテンツはを生成し(上記にconsole.logラインから)

  • Chrome:ファイルは期待通りにダウンロードされ、pngとxlsの両方が使用可能です。
  • FireFox:何も起こりません。コンソール警告/エラーは表示されません。
  • EDGE

    • コンソールメッセージ:ナビゲーションが発生しました。データ:image/png; base64、iVBORw ...

    • コンソール警告: DOCTYPEが必要です。有効なHTML5のdoctypeを追加することを検討してください: ""

  • IE11コンソール:何もありません。現在のウィンドウで「data:image/png; base64、iVBORw ...」URLを開こうとします。

generated dataUrlは二重チェックされており、Chromeの動作によっても表示されます。

私は<a href="data:[mime][;base64],[encoded data] ></a>" download="filename.ext"が現在かなり標準的なものだと思いました。

質問:

のJavaScript生成されたファイルのダウンロードを呼び出すためのより良い(すなわち、クロスブラウザの互換性)方法はありますか?

+1

filesaver.js使用することができ、その場合には
は[FileSaver.js](https://github.com/eligrey/FileSaver.js/) – Satpal

+1

はい、FileSaverを使用するを見てください。または、ダウンロード方法に関する注意事項を読む:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a – WaldemarIce

+1

サポートされているタグについては、「https:// caniuse.com /#search = download'」を参照してください。 。それは非常に便利です。 javascriptタグ 'https:// caniuse.com /#search = createElement'でも動作します – pr0cz

答えて

1

一部のブラウザでは、html5ダウンロード属性はサポートされていません。あなたは

if(typeof link.download !== 'undefined'){ 
    //use <a> download 
} 
else{ 
    blob = toBlob(imageURIData); 
    saveAs(blob, name);//use filesaver.js 
} 
関連する問題