Web API - Clipboard

Clipboard API ,它允许我们与用户的剪贴板进行交互,实现复制和粘贴的功能。

Clipboard API 提供了以下方法,用于实现复制和粘贴:

  1. navigator.clipboard.writeText(text):这个方法用于将给定的文本复制到剪贴板。如果操作成功完成,它会返回一个已解析的 Promise。我们可以使用 await 来等待复制操作完成,或者使用 then 和 catch 来处理异步操作的结果。
  2. navigator.clipboard.write(data) :这个方法用于写入更复杂的数据类型,如文件、图像等。如果操作成功完成,它会返回一个已解析的 Promise。
  3. navigator.clipboard.readText():这个方法用于从剪贴板读取文本内容。它会返回一个 Promise,Promise 解析后会提供剪贴板中的文本内容。
  4. navigator.clipboard.read():这个方法用于读取更复杂的数据类型,如文件、图像等。它会返回一个 Promise,Promise 解析后会提供剪贴板中的数据。
粘贴复制文本
复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Clipboard API 示例</title>
    <style>
      #output {
        border: 1px solid #ccc;
        padding: 10px;
        margin-top: 10px;
      }
    </style>
  </head>
  <body>
    <h1>Clipboard API 示例</h1>
    <input type="text" id="inputField" placeholder="输入要复制的文本">
    <button id="copyButton">复制文本到剪贴板</button>

    <button id="pasteButton">从剪贴板粘贴文本</button>
    <div id="output">粘贴的文本将显示在这里。</div>

    <script>
      const copyButton = document.getElementById('copyButton');
      const pasteButton = document.getElementById('pasteButton');
      const inputField = document.getElementById('inputField');
      const output = document.getElementById('output');

      // 复制文本到剪贴板
      copyButton.addEventListener('click', async () => {
        const text = inputField.value;
        if (text.trim() === '') {
          alert('请输入要复制的文本。');
          return;
        }
        try {
          await navigator.clipboard.writeText(text);
          alert('文本已复制到剪贴板!');
        } catch (error) {
          console.error('复制失败:', error);
          alert('复制失败,请手动复制。');
        }
      });

      // 从剪贴板粘贴文本
      pasteButton.addEventListener('click', async () => {
        try {
          const text = await navigator.clipboard.readText();
          output.textContent = `粘贴的文本:${text}`;
        } catch (error) {
          console.error('粘贴失败:', error);
          alert('粘贴失败,请手动输入。');
        }
      });
    </script>
  </body>
</html>
粘贴复制图片
复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Clipboard Image Example</title>
  <style>
    img {
      width: 50%;
    }
  </style>
</head>

<body>
  <h1>Clipboard Image Example</h1>
  <img id="sourceImage" src="./bing0509.png" alt="Sample Image">
  <br />
  <button id="copyImageButton">复制图片</button>
  <button id="pasteImageButton">粘贴图片</button>
  <div id="imageDisplay"></div>

  <script>
    const copyImageButton = document.getElementById('copyImageButton');
    const pasteImageButton = document.getElementById('pasteImageButton');
    const sourceImage = document.getElementById('sourceImage');
    const imageDisplay = document.getElementById('imageDisplay');

    // 复制图片到剪贴板
    copyImageButton.addEventListener('click', async () => {
      try {
        const response = await fetch(sourceImage.src);
        const blob = await response.blob();
        const item = new ClipboardItem({ 'image/png': blob });
        await navigator.clipboard.write([item]);
        alert('图片已复制到剪贴板!');
      } catch (err) {
        console.error('无法复制图片到剪贴板:', err);
      }
    });

    // 从剪贴板粘贴图片
    pasteImageButton.addEventListener('click', async () => {
      try {
        const clipboardItems = await navigator.clipboard.read();
        for (const clipboardItem of clipboardItems) {
          const types = clipboardItem.types;
          if (types.includes('image/png')) {
            const blob = await clipboardItem.getType('image/png');
            const imageUrl = URL.createObjectURL(blob);
            const img = document.createElement('img');
            img.src = imageUrl;
            imageDisplay.appendChild(img);
            alert('图片已从剪贴板粘贴!');
            break;
          }
        }
      } catch (err) {
        console.error('无法从剪贴板粘贴图片:', err);
      }
    });
  </script>
</body>

</html>
相关推荐
橙子家2 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
To_OC2 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
最新资讯动态3 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态3 小时前
游戏出海,从产品走向体系
前端
最新资讯动态3 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态3 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝5 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen5 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒6 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
山河木马7 小时前
矩阵专题0-webGL中的矩阵
javascript·webgl·计算机图形学