JavaScript/イベント/paste

JavaScript/イベント/paste

クリップボードをペーストした場合

このような感じで操作できる。これは Chrome の挙動。

mytextarea.addEventListener("paste", function(e){
   for(let item of e.clipboardData.items){
       console.log(item.type)
       var file = item.getAsFile();
   }
});

for で回しているのは別にクリップボードに履歴とかがあるわけでなく、状況やコピーした内容によってはこの items が複数になる場合がある。このような場合は type などで判定して continue で欲しいモノが見つかるまで飛ばすという操作が必要になる。

paste イベントで発生するイベントから取得する clipboardData は全項目変更不可能でペースト時にはクリップボードの内容を変更できない。

type

一応仕様としてはこんだけあるっぽいが、Web で JS で制御するとなると事実上、text/plain と image/png しか無い。

text/plain 単なるテキスト
text/uri-list
text/csv
text/css
text/html
application/xhtml+xml
image/png 画像一式。クリップボードの元の画像が何であろうとクリップボード中の画像となったらとりあえず PNG なようだ
image/jpg, image/jpeg
image/gif
image/svg+xml
application/xml, text/xml
application/javascript
application/json
application/octet-stream

アニメーション GIF をペーストする

現状ではアニメーションGIF画像をクリップボードにコピーしてもその動きは失われて、単なる PNG としてペーストされる。 なので2019年現在それはできない。

ペーストしない

このハンドラはそのまま終了するならばクリップボードの内容がそのままペーストされてしまう。

ペーストでは無く独自の処理をしたいならペーストをキャンセルしたい。

mytextarea.addEventListener("paste", function(e){
    e.preventDefault();
});

このように記述するとペーストがキャンセルされる。

ペースト内容を書き換えてペースト

前述の通り、clipboardData はすべて変更不能なのでペーストする内容を書き換えてペーストはできない。

おそらくペーストしたいのは input text とか textarea の内部だとは思うが、 クリップボードの中身は書き換えられないので、ペーストをキャンセルして自前で value に突っ込むことで実現する。

javascript/ope/dom_ope/event/paste.txt · 最終更新: 2019-06-10 12:26 by ore