33 lines
802 B
TypeScript
33 lines
802 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;
|
|
};
|