質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1075閲覧

Clipboard APIでページ内複数のテキストをクリップボードにコピーしたい

Izumo1101

総合スコア49

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2023/07/12 00:30

実現したいこと

Clipboard APIを利用してページ内のinput要素のvalueをすべてクリップボードへ貼り付けたい

前提

GASでwebアプリ(HTML)を作っており、その中の一つの機能として、ボタン押下1回でページ内のinput要素のvalueをクリップボードにコピーすることを目指しています。
今後の運用を考え、IDを一つずつ指定のアナログな方法が好ましいと思っています。
コピーする要素は連結されてはだめで、一つずつクリップボードにコピーしたいと思っています。
なおペーストは行わずコピーだけです。

発生している問題・エラーメッセージ

ソース内、最終の処理のみ適用されてしまいます。
※#test3のみコピーされる

該当のソースコード

javascript

1const copyToClipboard = ()=>{ 2 let text = document.querySelector('#test1').value; 3 navigator.clipboard.writeText(text); 4 let text2 = document.querySelector('#test2').value; 5 navigator.clipboard.writeText(text2); 6 let text3 = document.querySelector('#test3').value; 7 navigator.clipboard.writeText(text3); 8};

試したこと

querySelectorAllなどでは今回の趣旨に合わないため個別のID対象としましたがいくつ増やしても減らしても、最終の要素しかコピーされません。

このAPIの使用は初めてのため基本的なことをわかっていないかもしれませんがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2023/07/12 00:49

> valueをすべてクリップボードへ貼り付けたい 仮にそれができたとして、クリップボードに入った複数のデータをどうやって利用するつもりなのでしょうか?
Izumo1101

2023/07/12 00:52

今回の対象のページにある要素を、違うページの各項目に入力する必要があります。その際少しでも効率化するため、クリップボードから連続してペーストできるように、元ページの要素をあらかじめクリップボードへ一気にコピーしておきたいと考えています。
int32_t

2023/07/12 01:11 編集

macOS はそもそも標準ではクリップボードに複数の値は持てない気がします。 Windows は「windowsキー + v」でクリップボード履歴が確認できます。 いずれにしても、Ctrl-V や ⌘-V でペーストされるのは最後の値だけです。
Izumo1101

2023/07/12 01:14

大事な情報が抜けていました。Windowsでの操作を前提としています。 おっしゃる通りwinはクリップボードに履歴が複数残ります。ここから貼り付けますのでctrl+Vではなくクリップボードを押下することになりますので最後の値のみが貼り付けられるわけではありません。
int32_t

2023/07/12 01:17

Windows前提、了解しました。 クリップボード履歴に、コードからコピーした最後のもの以外が入っていなかったという症状ですか?
Izumo1101

2023/07/12 01:19

ご認識の通りです。検証にあたってはクリップボードを空の状態にして関数を動かしていますが、履歴が一つしか入りません。入った一つは関数の最後のidのものになりますので、イメージとしては「クリップボードの中の一つの枠に3回上書きしている」感じでしょうか。
guest

回答1

0

ベストアンサー

ちょいと検証してみましたが、writeText() が完了してからある程度時間を置かないと履歴に残ってくれないようです。ブラウザの Clipboard API の仕様書には「後続の writeText() が前の writeText() をキャンセルする」というような挙動は書いてありませんでしたので、Windows のクリップボード履歴の仕様なのかもしれません。

下記コードのように writeText()Promise の完了を待って、かつ500msの間隔を空けると履歴に3つ残りました。

js

1const copyToClipboard = async () => { 2 let text = document.querySelector('#test1').value; 3 await navigator.clipboard.writeText(text); 4 await new Promise(resolve => setTimeout(resolve, 500)); 5 let text2 = document.querySelector('#test2').value; 6 await navigator.clipboard.writeText(text2); 7 await new Promise(resolve => setTimeout(resolve, 500)); 8 let text3 = document.querySelector('#test3').value; 9 await navigator.clipboard.writeText(text3); 10};

投稿2023/07/12 01:43

int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Izumo1101

2023/07/12 03:04

なるほど、Windows側の使用なんですね、盲点でした。大変助かりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問