Edited at

Google Chrome ver60からa要素のdownload属性が同一オリジンポリシーに厳密になった

More than 1 year has passed since last update.

開発しているGoogle Chrome拡張機能で、この仕様変更により困ったのでメモ。

Google Chromeのリリースノートを読んでも関連する変更点が見つからず、Chromiumの変更ログを読んでも見つからず、やむなく状況から推測したものなので「推測」として読んでいただければ。

情報などあれば教えてほしいです。

追記: コメントでまさしく正解を教えていただいているので、後ほど修正予定ですー。


HTML a 要素の仕様

<a href="example.com/abc.jpg" download="123.jpg">download</a>

上記のクリックが発火すると、example.com/abc.jpg123.jpgというファイル名で保存しようとする仕様。

WHATWG 1


download属性が存在する場合、著者はリソースをダウンロードするために使用されるハイパーリンクを意図することを示す。属性は値を持ってもよい。値が存在する場合、ローカルファイルシステムでリソースの標識付けに使用するための著者に推奨されるデフォルトのファイル名を指定する。


MDN 2


この属性は、URL に移動するのではなくダウンロードするようブラウザーへ示しますので、ユーザーはローカルファイルとして保存することを促されます。属性に値を指定した場合、保存プロンプトのデフォルトのファイル名として解釈します

注記:

この属性は 同一オリジンの URL に限り動作します。


この、「この属性は 同一オリジンの URL に限り動作します」の部分について、Google Chromeはバージョン60から同じ動きをするようになったっぽい。


Google Chrome バージョン 60 よりも前の仕様


同一オリジン内のリンク

example.com上でexample.comのファイルを落とそうとする

123.jpgとしてダウンロードされる。download属性の値が適用。


example.com/index.html

<a href="example.com/abc.jpg" download="123.jpg">download</a>



異なるオリジンへのリンク

example.com上でqiita.comのファイルを落とそうとする

123.jpgとしてダウンロードされる。download属性の値が適用。


example.com/index.html

<a href="qiita.com/abc.jpg" download="123.jpg">download</a>



Google Chrome バージョン 60 以降の仕様


同一オリジン内のリンク

example.com上でexample.comのファイルを落とそうとする

123.jpgとしてダウンロードされる。download属性の値が適用。


example.com/index.html

<a href="example.com/abc.jpg" download="123.jpg">download</a>



異なるオリジンへのリンク

example.com上でqiita.comのファイルを落とそうとする

abc.jpgとしてダウンロードされる。download属性の値は無視。


example.com/index.html

<a href="qiita.com/abc.jpg" download="123.jpg">download</a>


つまりはMDNに書いてある 2


注記:

この属性は 同一オリジンの URL に限り動作します。


により近い仕様になった、ってことみたい。