みかづきブログ・カスタム

基本的にはちょちょいのほいです。

iOS13からdownload属性の挙動が変わった模様 📱

f:id:kimizuka:20201009231253p:plain

先日、10文字ホラージェネレーター たるものを制作させていただきました。

10.ujiqn.com

「ユーザーが入力した文字をCanvasにレンダリングして画像として書き出す」という非常にシンプルな仕様のサイトです。
生成した画像をローカルにダウンロードしてもらうために、ひさしぶりにダウンロード属性を使ってみたところ、iOS14から仕様が変わっていることに気づきました。

ダウンロード属性とは

aタグに設定する属性です。

リンクされた URL に移動するのではなく、保存するようユーザーに促します。値があってもなくても利用できます。

download は同一オリジンの URL と、 blob:、 data: の各スキームでのみ動作します。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/a#attr-download より引用

developer.mozilla.org

という感じで、ユーザーにファイルをダウンロードしてもらう際に便利な属性です。

このダウンロード属性を使って、これまでCanvasにレンダリングした画像をダウンロードしてもらうときは、

  1. canvasをtoDataURLを使ってbase64にする
  2. base64をaタグのdownload属性に指定する

としていました。

iOSにおけるダウンロード属性の設定されたaタグをタップした際の挙動

iOS12までは「別タブで画像を開く」という挙動でしたが、iOS13から名前通りダウンロードする仕様に変わったようです。

f:id:kimizuka:20210701001331g:plain

では、ダウンロードしたファイルはどこで管理されているのかというとファイルアプリ内に保存されています。

ファイル

ファイル

  • Apple
  • ユーティリティ
  • 無料
apps.apple.com

ファイルアプリ内の画像をカメラロールに保存するためには、長押し → 「共有」 → 「画像を保存」と選択する必要があり、なかなか直感的ではありません。

そんなこんなで、10文字ホラージェネレーターでは、生成した画像を長押しすることで直接カメラロールに保存できる機能もつけておいた次第です。

f:id:kimizuka:20210701011514g:plain

現場からは以上です。


追記

href属性にbase64を直接指定しようとした際の挙動はこちら

blog.kimizuka.org