calckey/packages/client/src/scripts/copy-to-clipboard.ts

34 lines
804 B
TypeScript

/**
* Clipboardに値をコピー(TODO: 文字列以外も対応)
*/
export default (val) => {
// 空div 生成
const tmp = document.createElement("div");
// 選択用のタグ生成
const pre = document.createElement("pre");
// 親要素のCSSで user-select: none だとコピーできないので書き換える
pre.style.webkitUserSelect = "auto";
pre.style.userSelect = "auto";
tmp.appendChild(pre).textContent = val;
// 要素を画面外へ
const s = tmp.style;
s.position = "fixed";
s.right = "200%";
// body に追加
document.body.appendChild(tmp);
// 要素を選択
document.getSelection().selectAllChildren(tmp);
// クリップボードにコピー
const result = document.execCommand("copy");
// 要素削除
document.body.removeChild(tmp);
return result;
};