忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/05    04« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  »06

iPad・iPhone でクリップボードへの情報挿入ができないことがある

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 だとこの処理がうまく動かない……

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R