Skip to content

Instantly share code, notes, and snippets.

@tanakahisateru
Created July 12, 2022 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tanakahisateru/a9d875a9bfbda866c4a4e2d013a490f6 to your computer and use it in GitHub Desktop.
Save tanakahisateru/a9d875a9bfbda866c4a4e2d013a490f6 to your computer and use it in GitHub Desktop.
クロスプラットフォームな ClipboardEvent 生成
/**
* コードによるクリップボードイベントの生成はブラウザ実装によってまったく違う。
*
* Gekko 系 (Firefox) はコンストラクタの clipboardData 初期値を無視するが、
* 生成されたイベントオブジェクトの clipboardData には空の DataTransfer が
* 入っている。データ入りの DataTransfer を事前準備できない。
*
* WebKit 系 (Chrome, Safari, Edge) は、clipboardData の初期値をコンストラクタに
* 与えないと clipboardData = null になっている異常なオブジェクトを作ってしまう。
* こちらはデータ入りの DataTransfer を最初から与えても OK。
*
* この挙動差のために、こう実装するパターン以外は NG となる。
*
* @param data テキストデータ
*/
function createTextPasteEvent(data: string): ClipboardEvent {
const event = new ClipboardEvent('paste', {
clipboardData: new DataTransfer(),
bubbles: true,
})
event.clipboardData.setData('text/plain', data)
return event
}
@tanakahisateru
Copy link
Author

clipboardData は readonly なのでいちど null で生成されると直せなくなる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment