js自定义复制粘贴内容

 
一篇简易明了,一看就懂得知识博客,话不多说 开撸。。。
 
 
 
需求如下:
 
复制:   
我是一段话。
粘贴后:
我是一段话。
作者:xxx
链接:xxx
来源:博客园

 

四个知识点实现:

1.element.oncopy,用来捕获复制事件;
 
2.window.getSelection()获取用户复制的内容
  1)它返回一个**Selection对象**;
  2)在IE8及以下的浏览器上不支持;
  3)我们最终要获取的是选中区域的纯文本,而不是一个Seletion对象。因此需要将Selection对象转换成字符串,可以通过拼接一个空字符串或使用String.toString()方法。
 
3.clipboardData 的 setData()方法将信息写入剪贴板;
该对象有三个方法:
getData()方法接受一个format参数,即要取得的数据的格式。数据类型有:text/plain、text/uri-list。
setData()方法授受两个参数,一个是format参数,代表数据类型。第二个参数代表要放入剪贴板中的文本内容。这里我们可以指定format参数为text/plain,代表纯文本。
clearData()方法接受一个可选参数format,代表要删除的数据类型。如果此参数为空字符串或未提供,则删除所有类型的数据。
 
4.阻止掉默认复制事件;
 

整体代码如下:

<script>
        document.oncopy = function (e) {
            // 获取选区对象
            let selObj = window.getSelection();// IE8及更早不支持window.getSelection
            if (typeof selObj == 'undefined') return false;

            // 获取clipboardData对象
            // Chrome\Safari\Firefox浏览器中,这个对象是event对象的属性
            // IE浏览器中,它是window对象的属性
            let clipboardData = e.clipboardData || window.clipboardData;

            // 获取选区文本内容
            let selectedText = selObj + '';
            let copytext = selectedText +
                    '\n\n\n' +
                    '作者:XXX\n' +
                    '链接:' + location.href + '\n' +
                    '来源:博客园\n' +
                    '著作权归作者所有。商业转载请联系作者获取授权,非商业转载请注明出处。';

            clipboardData.setData('text/plain', copytext);
            
            // 取消默认的复制事件
            return false;
            // e.preventDefault()亦可
            
        }
    </script>

 

 

 

-------------------------------------------------------------------------------

如有错误,欢迎评论指正、共同提高。[握手]    

欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/juneling ]

 

posted @ 2020-12-01 12:02  Juine  阅读(1249)  评论(0编辑  收藏  举报