Created
July 12, 2022 09:48
-
-
Save tanakahisateru/a9d875a9bfbda866c4a4e2d013a490f6 to your computer and use it in GitHub Desktop.
クロスプラットフォームな ClipboardEvent 生成
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* コードによるクリップボードイベントの生成はブラウザ実装によってまったく違う。 | |
* | |
* 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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
clipboardData は readonly なのでいちど null で生成されると直せなくなる