如何实现掘金的复制功能----添加版权提示文案

188 阅读1分钟

在网页中通过ctrl+c或者右键复制文字,如何将版权信息一并携带呢?来看看本文对你有没有帮助

首先我们要知道,在js中的ClipboardEvent事件即剪切板事件,其中包括三个事件(copy,paste,cut)。

浏览器兼容性

image.png

浏览器在copy,paste,cut事件中起了什么作用?

在浏览器中实现了操作系统的复制粘贴功能。 copy事件:会将复制的内容存入操作系统的剪切板中。 paste事件:会将操作系统的剪切板中的内容复制到页面的可编辑区域。 cut事件:如果剪切的是可编辑内容,会将内容剪切到操作系统的剪切板上,触发浏览器的cut事件;如果是不可编辑的内容,不会将内容剪切到操作系统的剪切板上,但是会触发cut事件。

浏览器如何能对copy,paste,cut事件中的数据进行操作?

浏览器的ClipboardEvent事件对象上有个clipboardData属性,ClipboardEvent.clipboardData 属性保存了一个DataTransfer对象,这个对象可用于: 描述哪些数据可以由 cut和copy事件处理器放入剪切板,通常通过调用 setData(format, data)方法; 获取由paste 事件处理器拷贝进剪切板的数据,通常通过调用getData(format) 方法。

如何在复制的内容中加入版权提示信息呢?

可以通过event.preventDefault()来阻止事件的默认行为,然后通过document.getSelection()获取页面选中内容,再通过DataTransfer对象上的方法,从系统剪切板写入数据。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>添加版权信息demo</title>
</head>

<body>
    <div class="copy">
        这段内容是我要复制的内容~~~~测试文案~~~~~
    </div>
</body>

</html>

<script>
    window.addEventListener('copy', function (event) {
        //监听copy事件,阻止将选中内容复制到系统剪切板上。
        event.preventDefault();

        // document.getSelection()获取选中内容对象。
        const selection = document.getSelection();
        // selection 是一个 Selection 对象。如果想要将 selection 转换为字符串,可通过连接一个空字符串("")或使用 String.toString() 方法。
        var selectContent = selection.toString();

        var dealContent = selectContent + "复制文案有版权信息,不得商用!!!"
        event.clipboardData.setData("text/plain", dealContent)
    })

</script>