美文网首页Front End
[FE] 拷贝文本到剪切板

[FE] 拷贝文本到剪切板

作者: 何幻 | 来源:发表于2018-07-18 00:43 被阅读9次

    将文本拷贝到剪切板,是一个经常遇到的问题,
    不过目前 Clipboard API 还处于 Draft 状态,
    而有些时候又不想引入 clipboard.js

    例如在编写 Tampermonkey 脚本的时候,
    我们需要简易实现一下拷贝文本到剪切板的操作。

    这时候可以参考 Copying text to clipboard with JavaScript 来实现,
    github: clipboard.js也应用了同样的原理。

    1. 详细步骤

    (1)创建一个隐藏的textarea,将待拷贝的文本放到其中

    t = document.createElement('textarea');
    t.value = 'hello';
    t.style.visibility = true;
    

    (2)将textarea,加入文档流中

    document.body.appendChild(t);
    

    (3)选中textarea中的内容,调用document.execCommand

    t.select();
    document.execCommand('copy');
    

    (4)删除textarea

    t.parentElement.removeChild(t);
    

    2. 汇总一下

    const copyToClipboard = text => {
    
        // 创建一个隐含的textarea
        const t = document.createElement('textarea');
        t.value = text;
        t.style.visibility = true;
    
        // 加入文档流中
        document.body.appendChild(t);
    
        // 选中textarea的内容,并拷贝到剪切板
        t.select();
        document.execCommand('copy');
    
        // 删除隐藏的textarea
        t.parentElement.removeChild(t);
    };
    

    注:
    以上代码中使用t.select()选中textarea中的内容,
    这样会导致页面中原来被鼠标选中的内容失去选择,
    所以,可能还需要使用 Selection API 恢复选中的内容。

    const copyToClipboard = text => {
    
        // 获取之前选中的内容
        const selected = document.getSelection().rangeCount > 0 ? 
            document.getSelection().getRangeAt(0) : 
            null;
    
        // 创建一个隐含的textarea
        const t = document.createElement('textarea');
        t.value = text;
        t.style.visibility = true;
    
        // 加入文档流中
        document.body.appendChild(t);
    
        // 选中textarea的内容,并拷贝到剪切板
        t.select();
        document.execCommand('copy');
    
        // 删除隐藏的textarea
        t.parentElement.removeChild(t);
    
        // 如果之前选中了,就恢复
        !selected || 
            document.getSelection().removeAllRanges() || 
            document.getSelection().addRange(selected);
    };
    

    参考

    Copying text to clipboard with JavaScript
    MDN: Clipboard
    clipboard.js
    MDN: document.execCommand
    MDN: Selection

    相关文章

      网友评论

        本文标题:[FE] 拷贝文本到剪切板

        本文链接:https://www.haomeiwen.com/subject/cnsnpftx.html