web复制黏贴中添加额外信息

作者: 牧羊童鞋 | 来源:发表于2018-02-02 10:10 被阅读132次

有时候我们需要在用户复制网站内容时,给复制的内容加上一些而外的信息,比如网站和作者,起到维护版权和宣传的作用,这个需求还是挺有意思的。

实现的伪代码如下

window.addEventListener('copy', (e) => {
    const selection = window.getSelection();
    const range = selection.getRangeAt(0);
    const formatHTML = getFormatedHtml(getRangeHtml(range), extraData);
    evt.clipboardData.setData('text/plain', getCopyText(getRangeHtml(range), extraData));
    evt.clipboardData.setData('text/html', formatHTML);
})

上面代码中通过evt.clipboardData.setData方法来修改clipboardData,以此达到增加二外信息的目的。但是这个有个缺点就是兼容性不够,不是所有浏览器器都能使用。

因此我们还需要一个hack的方式来处理无法设置clipboardData的情况,hack的方式总结一句话就是移花接木,在copy事件handle中,通过Range.cloneContents()方法获取到用户选中的内容,并把clone下来的内容与额外信息一起塞到一个隐藏的div中,这时候修改光标选中这个隐藏的div,用户复制这个div里的内容了,目的达成。

这个hack方式需要注意的有两点:

  1. 事后需要恢复光标。
  2. clone下来的内容与额外信息需要先用pre标签包裹,以防止复制的格式丢失。
 hackCopy(html, range) {
    const dom = document.createElement('div');
    dom.innerHTML = html;
    dom.style.position = 'fixed';
    dom.style.left = '-9999px';
    document.body.appendChild(dom);
    // 选中隐藏dom,这时候用户复制的就是这个dom的内容了
    window.getSelection().selectAllChildren(dom);
    setTimeout(() => {
      try {
        // 事后恢复光标
        window.getSelection().removeAllRanges();
        window.getSelection().addRange(range);
      } catch (e) {}
      document.body.removeChild(dom);
    }, 0);
  }

有了这个思路,完整实现web复制黏贴中添加额外信息的需求应该不难了

相关文章

  • web复制黏贴中添加额外信息

    有时候我们需要在用户复制网站内容时,给复制的内容加上一些而外的信息,比如网站和作者,起到维护版权和宣传的作用,这个...

  • 复制黏贴,,

    爱情经得起风雨,却经不起平淡;友情经得起平淡,却经不起风雨!

  • 复制黏贴

    无尽意,观世音菩萨摩诃萨,威神之力,巍巍如是。若有众生,多于淫欲,常念恭敬观世音菩萨,便得离欲。若多嗔恚(huì)...

  • 复制黏贴

    看着窗外的天色渐渐暗了下来,我不知道下班的时候又到了,一天又挨过去了,坐上车,系好保险带,慢慢地匀速开回家。在家楼...

  • 0317 今日反思

    0317 今日反思复制黏贴的过程中没有了

  • A10 选择性粘贴

    常用的黏贴功能为黏贴、黏贴数值、转置、黏贴链接 1.黏贴:复制来源的数值、公式、格式等所有内容 2.黏贴数值:仅复...

  • 利用Python爬取妹子图

    ** 在生活和工作中,有时候需要在网络上获取大量信息,可是采用复制+黏贴的方式却带来,工作量大和信息采集不彻...

  • 职场提升效率必备技能:一个工作簿如何按列快速拆分为多个sheet

    职场小白思路:首先对数据按照销售地进行排序,然后开始新建多个sheet,然后复制,黏贴,复制,黏贴......效率...

  • vim命令合集

    复制黏贴 yy复制光标所在行 nyy复制光标所在行以后n行 p黏贴到光标所在处 其他 dd删除光标所在行 /向后搜...

  • 543复制黏贴

    300字。300字。300字。300字。300字。300字。300字。300字。300字。300字。300字。30...

网友评论

    本文标题:web复制黏贴中添加额外信息

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