前端开发您现在的位置是:首页 > 博客日志 > 前端开发

在网站copy时自带的版权小尾巴以及“复制代码“,可以怎么实现

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-10-04前端开发 4 0关键字:   

前言每天网上的博客各个领域都会涌现新文章,有时候看到感兴趣的知识就想把某段文字 copy下来 摘录下来,等有时间后慢慢品味在部分网站上,如果只是复制少量文字,并没有什么不同。

前言hT7无知

每天网上的博客各个领域都会涌现新文章,有时候看到感兴趣的知识就想把某段文字 copy下来 摘录下来,等有时间后慢慢品味hT7无知


hT7无知

在部分网站上,如果只是复制少量文字,并没有什么不同。但是当我们复制的文字多的话会发现多了一个小尾巴hT7无知


hT7无知

所谓小尾巴是指在复制文本的最后会多一个作者和出处信息,如下:hT7无知


hT7无知

···(复制的内容)···hT7无知

————————————————hT7无知

版权声明:本文为xxx的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。hT7无知

原文链接:https://www.cnblogs.com/rainy-night/hT7无知


hT7无知

博客园可能并没有这种情况,但是在很多技术论坛、博客都有这样的处理。当我们复制文章内容的时候,往往会自动加上一段文本信息版权hT7无知


hT7无知

那么如果我们也想实现这样的效果要怎么做呢?hT7无知


hT7无知

实现hT7无知

版权小尾巴hT7无知

前提:假定所选择的字符串长度大于等于130时带上版权信息hT7无知


hT7无知

<div id="copy">hT7无知

  <div>示例一:这不是一个 bug,这只是一个未列出来的特性。</div>hT7无知

  <div>hT7无知

    示例二:ES6 是一个泛指,含义是 5.1 版以后的 JavaScript。hT7无知

    ES6 是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。hT7无知

    它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,使之成为企业级开发语言。hT7无知

  </div>hT7无知

</div>hT7无知


hT7无知

<script>hT7无知

var copyEl = document.getElementById('copy');hT7无知

copyEl.oncopy = function (e) {hT7无知

  if (window.getSelection(0).toString().length >= 130) {hT7无知

    var clipboardData = event.clipboardData || window.clipboardData;hT7无知

    // 阻止默认事件hT7无知

    e.preventDefault();hT7无知

    var copyMsg =hT7无知

      window.getSelection() +hT7无知

      '\r\n————————————————\r\n版权声明:本文为xxx的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' +hT7无知

      '\r\n原文链接:' + location.href;hT7无知

    // 将处理完的信息添加到剪切板hT7无知

    clipboardData.setData('Text', copyMsg);hT7无知

  }hT7无知

};hT7无知

</script>hT7无知

当复制示例一后可以发现粘贴是正常的;复制示例二则会在末尾携带版权信息hT7无知


hT7无知

复制代码功能hT7无知

我们直接复制代码,会发现当字数超过一定值时也是会携带版权信息。但是点击“复制代码”的时候可以一键复制区域内的代码,这可以怎么实现呢?hT7无知


hT7无知

<div>hT7无知

  <pre>hT7无知

<code id="copyable">// 浮点数相加hT7无知

function mathMultiply(arg1, arg2) {hT7无知

  var m = 0;hT7无知

  var s1 = arg1.toString();hT7无知

  var s2 = arg2.toString();hT7无知

  try {hT7无知

    m += s1.split('.')[1].length; // 小数相乘,小数点后个数相加hT7无知

  } catch (e) {}hT7无知

  try {hT7无知

    m += s2.split('.')[1].length;hT7无知

  } catch (e) {}hT7无知

  return (hT7无知

    (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /hT7无知

    Math.pow(10, m)hT7无知

  );hT7无知

 }<code />hT7无知

</pre>hT7无知

  <button id="btn">复制代码</button>hT7无知

</div>hT7无知


hT7无知

<script>hT7无知

  var btn = document.getElementById('btn');hT7无知

  btn.onclick = function copyCode() {hT7无知

    window.getSelection().removeAllRanges(); // 清除选中的文本hT7无知

    var range = document.createRange();hT7无知

    range.selectNode(document.getElementById('copyable'));hT7无知

    var selection = window.getSelection();hT7无知

    selection.addRange(range); // 添加选中的内容hT7无知

    document.execCommand('copy'); // 执行复制hT7无知

    window.getSelection().removeAllRanges(); // 清除复制选中的文本hT7无知

    alert('代码复制成功');hT7无知

  };hT7无知

</script>hT7无知

document.execCommand()因为安全问题已经废弃,不适合长期使用hT7无知


hT7无知

第三方工具hT7无知

除了以上实现方式,也可以使用第三方库封装好的函数来实现hT7无知


hT7无知

clipboard.jshT7无知

介绍:只有3k大小,不依赖任何框架hT7无知

GitHub:https://github.com/zenorocha/clipboard.js hT7无知


hT7无知


hT7无知

本文为转载文章,版权归原作者所有,不代表本站立场和观点。

很赞哦! () 有话说 ()

相关文章