[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
navigator.clipboard.writeText(text);
にせよ document.execCommand('copy');
にせよ iPhone や iPad から動かせないことがあった。理由を調べてみた所 navigator.clipboard.writeText fail… | Apple Developer Forums を見つけた。
I found more info here: https://webkit.org/blog/10247/new-webkit-features-in-safari-13-1/ It says that the API "must be called within user gesture event handlers like pointerdown or pointerup, and only works for content served in a secure context (e.g. https://)"
(雛訳)https://webkit.org/blog/10247/new-webkit-features-in-safari-13-1/の記事を見つけました。これによると "セキュリティ上の事由によりクリップボードの API は HTTPS 等セキュアな接続をした上でタップ等のユーザの直接操作により呼び出されなければ動きません"
ゆとシート2のクリップボード機能がこの関係で iPad や iPhone 上でうまく動かなかった。この処理はクリックに応じてサーバに情報を非同期で取りに行き、得た情報に基づいてクリップボードに挿入するべきテキストを生成する。非同期で情報を取得して呼び出される関数はもはや "タップ等のユーザの直接操作により呼び出され" たものとしては扱われないようだ。
あがいてみたのが https://github.com/yutorize/ytsheet2/pull/30 である。該当のソースコードはこちら。
ClipboardItem
を用いることでnavigator.clipboard.write
を非同期な処理を挟んでも実行可能とできた。ClipboardItem の中で非同期なやりとりを実施すればいい。
ただ、この記事を書いている時点では Google Chrome @ Windows だとこの処理がうまく動かない……
ただいまコメントを受けつけておりません。