当前位置:首页 > JavaScript

js 实现复制

2026-04-03 21:57:27JavaScript

使用 document.execCommand 方法(已废弃但仍可用)

此方法兼容较旧浏览器,但现代规范已标记为废弃。

function copyText(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  document.body.appendChild(textarea);
  textarea.select();
  document.execCommand('copy');
  document.body.removeChild(textarea);
}

使用 Clipboard API(现代推荐方式)

Navigator.clipboard API 是当前标准方法,需注意浏览器安全限制(通常要求 HTTPS 或 localhost)。

js 实现复制

async function copyText(text) {
  try {
    await navigator.clipboard.writeText(text);
    console.log('复制成功');
  } catch (err) {
    console.error('复制失败:', err);
  }
}

处理无权限情况

添加降级方案,当 Clipboard API 不可用时自动回退到传统方法:

js 实现复制

async function copyText(text) {
  if (!navigator.clipboard) {
    const textarea = document.createElement('textarea');
    textarea.value = text;
    document.body.appendChild(textarea);
    textarea.select();
    try {
      document.execCommand('copy');
      console.log('回退复制成功');
    } catch (err) {
      console.error('回退复制失败:', err);
    }
    document.body.removeChild(textarea);
    return;
  }

  try {
    await navigator.clipboard.writeText(text);
    console.log('复制成功');
  } catch (err) {
    console.error('复制失败:', err);
  }
}

复制特定元素内容

复制 DOM 元素内的文本内容(如 div 内的文字):

async function copyElementText(elementId) {
  const element = document.getElementById(elementId);
  if (element) {
    await copyText(element.innerText);
  }
}

添加用户反馈

复制操作后建议显示视觉反馈:

async function copyWithFeedback(text, feedbackElement) {
  await copyText(text);
  if (feedbackElement) {
    feedbackElement.textContent = '已复制!';
    setTimeout(() => {
      feedbackElement.textContent = '';
    }, 2000);
  }
}

注意事项

  • 某些浏览器可能要求复制操作必须由用户手势(如点击事件)触发
  • iOS Safari 对 Clipboard API 的支持有特殊限制
  • 在 iframe 中可能需要额外权限配置
  • 错误处理应包含权限拒绝(PermissionDenied)的情况

标签: js
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…