复制粘贴原来这么简单!!

在这份学习文档中,将介绍两种实现复制功能的方法:一种是使用 JavaScript 自定义方法,另一种是使用现代浏览器提供的 navigator.clipboard.writeText 方法。我们将会对这两种方法进行简要的介绍和比较。 超级简单!!快冲

简单粗暴的实现

我们将使用 JavaScript 来编写一个简单的复制功能。这个功能将包含以下步骤:

  1. 创建一个隐藏的文本框来容纳需要复制的文本。
  2. 执行复制操作。
  3. 在点击按钮时触发复制操作。
typescript 复制代码
import './App.css';

function App() {
  // 定义一个自执行函数,用于处理复制操作
  (function h_copy(FN_NAME: string) {
    // 尝试执行复制命令
    function execCommandCopy(): boolean {
      let succeeded: boolean;
      try {
        succeeded = document.execCommand('copy');
      } catch (err) {
        succeeded = false;
      }
      return succeeded;
    }

    // 添加事件监听器
    function addEvent(
      obj: any,
      evtype: string,
      fn: EventListenerOrEventListenerObject,
      useCapture?: boolean,
    ) {
      if (obj.addEventListener) {
        obj.addEventListener(evtype, fn, useCapture);
      } else {
        obj.attachEvent('on' + evtype, fn);
      }
    }

    // 将文本复制到剪贴板中
    function _H_copy(text: string, callback?: (result: boolean) => void) {
      // 创建一个隐藏的文本框,相当于我们的"复制器"
      const textArea = document.createElement('textarea');
      // 将要复制的文本放进去
      textArea.value = text;
      // 把它藏在幕后,不要影响我们的布局
      textArea.style.position = 'fixed';
      // 把"复制器"插入到页面中
      document.body.appendChild(textArea);
      // 让它获得焦点
      textArea.focus();
      // 选中文本
      textArea.select();
      const result = execCommandCopy();
      //移除该节点
      textArea.remove();
      callback && callback(result);
    }

    let copying = false;
    let copyTest = '';

    // 复制文本到剪贴板
    function copy(test: string) {
      copying = true;
      copyTest = test;
    }

    // 添加点击事件监听器
    addEvent(document, 'click', function () {
      if (copying) {
        _H_copy(decodeURIComponent(copyTest), (result) => {
          copying = false;
        });
      }
    });

    // 将 copy 函数绑定到全局对象 window 上
    window[FN_NAME] = copy;
  })('h_copy');

  return (
    // 渲染一个按钮,点击按钮触发复制操作
    <button
      onClick={() => {
        alert('复制成功');
        return window.h_copy(
          '第一行需要复制的内容\r\n第二行需要复制的内容\r\n第三行需要复制的内容',
        );
      }}
    >
      点击复制
    </button>
  );
}

export default App;

在线demo

另一种实现复制功能的方法是使用现代浏览器提供的 navigator.clipboard.writeText 方法。这个方法提供了一个更简洁和可靠的方式来执行复制操作。

javascript 复制代码
// 点击按钮后,调用 navigator.clipboard.writeText 将文本复制到剪贴板
const handleClick = () => {
  const textToCopy = '需要复制的文本内容';
  navigator.clipboard.writeText(textToCopy)
    .then(() => {
      alert('复制成功');
    })
    .catch((err) => {
      console.error('复制失败:', err);
      alert('复制失败,请手动复制文本');
    });
};

navigator.clipboard 是一个对象,它提供了对浏览器剪贴板的访问和控制。

属性

  • navigator.clipboard.readText: 一个异步方法,用于从剪贴板中读取文本内容。
  • navigator.clipboard.read: 一个异步方法,用于从剪贴板中读取数据。

方法

  • navigator.clipboard.writeText(text: string): Promise<void> : 一个异步方法,用于将指定的文本内容写入到剪贴板中,并返回一个 Promise 对象。
  • navigator.clipboard.write(data: ClipboardItem[]): Promise<void> : 一个异步方法,用于将数据写入到剪贴板中,并返回一个 Promise 对象。数据参数是一个数组,每个元素都是一个 ClipboardItem 对象。

注意事项

  • navigator.clipboard 对象的某些方法可能受到浏览器安全策略的限制,特别是在没有用户交互的情况下执行复制操作可能会被浏览器阻止。
  • 在某些浏览器中,对 navigator.clipboard 的访问可能需要在安全上下文(例如 HTTPS 网站)中才能生效。

方法比较

  • 自定义方法:可以在大多数情况下正常工作,不同的浏览器对 execCommand('copy') 方法的支持程度不同,可能导致在某些浏览器中无法正常工作。
  • navigator.clipboard.writeText 方法:提供了一种现代且更可靠的方式来执行复制操作,并且具有更好的移动设备支持。

结论

综上所述,尽管自定义方法在某些情况下可能会有用,但我们建议在可行的情况下使用 navigator.clipboard.writeText 方法来实现复制功能。这样可以提高用户体验,并确保在各种设备和浏览器中的可靠性。

希望这些信息对你有所帮助!如有其他问题,请随时提出~

相关推荐
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅7 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊7 小时前
jwt介绍
前端
爱敲代码的小鱼7 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax