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>
相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰10 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪10 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy11 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom12 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom12 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试