【JS】1686- 重学 JavaScript API - Clipboard API

news2024/12/22 18:48:32

e357ef6701e9bac03bf3b2846f9d93b0.jpeg

🏝 1. 什么是 Clipboard API

1.1 概念介绍

Clipboard API[1] 是一组 JavaScript API,用于在浏览器中操作剪贴板。通过 Clipboard API,开发者可以将文本、图片和其他数据复制到剪贴板,也可以从剪贴板中读取数据,实现复制、剪切和粘贴等功能。

1.2 作用和使用场景

Clipboard API 可以广泛应用于各种 Web 应用程序中,例如:

  • 在文本编辑器中实现复制、剪切和粘贴功能。

  • 在图像编辑器中实现复制和粘贴图像功能。

  • 在网页中实现复制分享链接的功能。

🎨 2. 如何使用 Clipboard API

Clipboard API 包括两个主要的接口:ClipboardDataTransfer。Clipboard 接口用于操作系统剪贴板(例如 Windows 或 macOS 中的剪贴板),它包含以下方法:

  • writeText(text: string): Promise<void>:将文本复制到剪贴板。

  • readText(): Promise<string>:从剪贴板读取文本。

以下是一个使用 Clipboard 接口将文本复制到剪贴板的示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Clipboard API Example</title>
  </head>
  <body>
    <button id="copy-btn">Copy to Clipboard</button>
    <script>
      const copyButton = document.getElementById("copy-btn");
      copyButton.addEventListener("click", async () => {
        try {
          await navigator.clipboard.writeText("Hello, World!");
          console.log("Text copied to clipboard");
        } catch (error) {
          console.error("Failed to copy text: ", error);
        }
      });
    </script>
  </body>
</html>

在这个示例中,点击「Copy to Clipboard」按钮会,就能成功复制「'Hello, World!'」这段文本。

DataTransfer 接口用于在应用程序内部模拟剪贴板,它包含以下方法:

  • setData(type: string, data: string): void:将指定类型的数据复制到剪贴板。

  • getData(type: string): string:从剪贴板读取指定类型的数据。

以下是一个使用 DataTransfer 接口将文本复制到剪贴板的示例:

const dataTransfer = new DataTransfer();
dataTransfer.setData("text/plain", "Hello, World!");

const element = document.createElement("div");
element.addEventListener("copy", (event) => {
  event.clipboardData.setData("text/plain", dataTransfer.getData("text/plain"));
  event.preventDefault();
});

document.body.appendChild(element);
element.dispatchEvent(new ClipboardEvent("copy"));

🧭 3. Clipboard API 的实际应用

以下是 Clipboard API 的一些实际应用场景:

3.1 复制文本

可以使用 Clipboard 接口将文本复制到剪贴板,以下是一个示例:

navigator.clipboard
  .writeText("Hello, World!")
  .then(() => console.log("Text copied to clipboard"))
  .catch((error) => console.error("Failed to copy text: ", error));

3.2 复制图片

可以使用 DataTransfer 接口将图片复制到剪贴板,以下是一个示例:

const dataTransfer = new DataTransfer();
dataTransfer.items.add(
  new File(["hello world"], "hello.txt", { type: "text/plain" })
);
dataTransfer.items.add(
  new File(["world"], "world.txt", { type: "text/plain" })
);

const element = document.createElement("div");
element.addEventListener("copy", (event) => {
  event.clipboardData.setData("text/plain", dataTransfer.getData("text/plain"));
  event.clipboardData.files = dataTransfer.files;
  event.preventDefault();
});

document.body.appendChild(element);
element.dispatchEvent(new ClipboardEvent("copy"));

3.3 从剪贴板中读取数据

可以使用 Clipboard 接口从剪贴板中读取文本,以下是一个示例:

navigator.clipboard
  .readText()
  .then((text) => console.log("Text read from clipboard: ", text))
  .catch((error) =>
    console.error("Failed to read text from clipboard: ", error)
  );

📋 4. Clipboard API 的兼容性和优缺点

4.1 Clipboard API 的兼容性

以下是 Clipboard API 的兼容性情况:

  • Chrome: 43+ ✅

  • Edge: 12+ ✅

  • Firefox: 41+ ✅

  • Internet Explorer: ❌

  • Opera: 29+ ✅

  • Safari: 10+ ✅

5459ad47701a0b2cfc89ad9176efbe00.png

可以使用 Can I Use[2] 网站查看 Clipboard API 的兼容性情况。

4.2 Clipboard API 的优缺点

Clipboard API 的优点包括:

  • 支持在浏览器中操作剪贴板,方便实现复制、剪切和粘贴等功能。

  • 支持将各种类型的数据(文本、图片等)复制到剪贴板。

  • 支持从剪贴板中读取各种类型的数据。

Clipboard API 的缺点包括:

  • 兼容性问题可能会导致一些用户无法使用相关功能。

  • 操作剪贴板需要获取用户的授权,可能会对用户造成不必要的干扰。

  • 在某些情况下,安全性可能存在问题,例如恶意网站可能会获取用户复制到剪贴板中的敏感信息。

👍 5. Clipboard API 的使用建议和注意事项

使用 Clipboard API 时,需要注意以下事项:

  • 在使用 Clipboard 接口时,需要获取用户的授权。可以在用户进行相关操作时请求授权,或者在页面加载时请求授权。

  • 在使用 DataTransfer 接口时,需要在 copy 事件中设置 event.clipboardData 属性,否则复制操作可能会失败。

  • 在处理剪贴板数据时,需要注意数据的类型,以避免出现意外的错误。

我们也可以使用一些第三方库,快速实现需求:

  • clipboard.js[3]: 33.1K⭐,一个简单的 JavaScript 库,用于操作剪贴板。

  • clipboard-polyfill[4]: 884⭐,一个剪贴板 polyfill 库,用于在不支持 Clipboard API 的浏览器中实现类似的功能。

  • react-copy-to-clipboard[5]: 2.2K⭐,一个基于 React 的剪贴板库,用于在 React 应用程序中实现复制和粘贴功能。

以上这些库都提供了简单易用的接口,可以帮助开发者快速实现 Clipboard API 相关功能。

🍭 6. 总结

Clipboard API 用于在浏览器中操作剪贴板,通过 Clipboard API,开发者可以将文本、图片和其他数据复制到剪贴板,也可以从剪贴板中读取数据,实现复制、剪切和粘贴等功能。在实际应用中,Clipboard API 可以广泛应用于各种 Web 应用程序中,例如文本编辑器、图像编辑器、网页等。然而,Clipboard API 的兼容性存在一定的问题,需要开发者进行兼容性处理。为了更好地使用 Clipboard API,开发者需要注意以下事项:

  • 在使用 Clipboard 接口时,需要获取用户的授权。

  • 在使用 DataTransfer 接口时,需要在 copy 事件中设置 event.clipboardData 属性。

  • 在处理剪贴板数据时,需要注意数据的类型。

🎯 7. 拓展学习

  • MDN Web Docs: Clipboard API[6]

  • W3C: Clipboard API and events[7]

Reference

[1]

Clipboard API: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API

[2]

Can I Use: https://caniuse.com/?search=Clipboard

[3]

「clipboard.js」: https://github.com/zenorocha/clipboard.js/

[4]

「clipboard-polyfill」: https://github.com/lgarron/clipboard-polyfill/

[5]

「react-copy-to-clipboard」: https://github.com/nkbt/react-copy-to-clipboard/

[6]

MDN Web Docs: Clipboard API: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API

[7]

W3C: Clipboard API and events: https://www.w3.org/TR/clipboard-apis/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/542979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OPPO解散芯片团队的真相,真的不缺钱?

OPPO解散芯片研发团队&#xff0c;各方都喜欢说OPPO不缺钱&#xff0c;解散芯片研发团队应该不是因为资金问题&#xff0c;然而仔细看看当下全球智能手机市场的表现&#xff0c;就未必会如此想了。 全球手机市场的出货量在2022年下跌了12%&#xff0c;跌穿了12亿部&#xff1b;…

【JVM】4. 虚拟机栈

文章目录 4.1. 虚拟机栈概述4.1.2. 初步印象4.1.3. 内存中的栈与堆4.1.4. 虚拟机栈基本内容Java虚拟机栈是什么&#xff1f;生命周期作用栈的特点面试题&#xff1a;开发中遇到哪些异常&#xff1f; 4.2. 栈的存储单位4.2.1. 栈中存储什么&#xff1f;4.2.2. 栈运行原理4.2.3. …

GPT理解的CV:基于Yolov5的半监督目标检测

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 主要贡献是提出了一种名为“Efficient Teacher”的半监督目标检测算法。与传统的监督学习算法不同&…

10人面试9个答错?鹅厂T12详解MySQL加锁机制

&#x1f449;腾小云导读 鹅厂有一道关于「数据库锁」的面试题。我们发现其实很多 DBA &#xff08;数据库管理员&#xff0c;Database administrator&#xff09;包括工作好几年的 DBA 都答得不太好。这说明 MySQL 锁的机制其实还是比较复杂&#xff0c;值得深入研究。本文对3…

探索Vue的组件世界-实现Vue插件

一个好的框架满足几大设计原则&#xff1a; 开闭原则&#xff1a;对修改源码关闭&#xff0c;对功能扩展开放 vue作为一个优秀的组件框架&#xff1a;满足开闭原则&#xff0c;提供良好的插件机制&#xff0c;以提供三方来扩展功能 Mixin模式 Vue.mixin(mixin) 全局注册的m…

嵌入式 QT 定时器与计时器

目录 1、定时器 2、计时器 2.1 QTime 时间转换成字符串函数 3、QT 获取日期&#xff0c;时间&#xff0c;星期 4、综合应用 定时器是用来处理周期性事件的一种对象&#xff0c;类似于硬件定时器。例如设置一个定时器的定时周期为 1000 毫 秒&#xff0c;那么每 1000 毫秒就会…

现在的00后,真是卷死了呀,辞职信准备好了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

Kali-linux使用社会工程学工具包(SET)

社会工程学工具包&#xff08;SET&#xff09;是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由David Kenned设计&#xff0c;而且已经成为业界部署实施社会工程学攻击的标准。SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误&#xff0c;攻击人们自身存在的…

python使用海龟turtle实现绘制汉字、中文

一、实现要求 使用python中的turtle库绘制指定汉字、中文 二、实现思路 1、要想实现汉字的绘制&#xff0c;首先需要知道汉字的笔画坐标&#xff0c;汉字的笔画坐标在网上有&#xff0c;需要使用爬虫技术抓取到指定汉字的笔画坐标信息 2、根据汉字的笔画坐标信息&#xff0c;使…

基于Kubernetes的电商平台部署:实现高可用、弹性伸缩与容器化管理

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 背景&#xff1a;电商平台的高可用性和可伸缩性是保证用户体验和业务发展的重要因素。Kubernetes&#xff08;K8s&#xff09;作为一个容器编排平台&#xff0c;可以提供强大的容器管理和自动化部署能力&#xff0c;使得…

人手一个 Midjourney,StableStudio 重磅开源!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 上个月 19 号&#xff0c;Stability AI 开源大语言模型 StableLM&#xff0c;模型的 Alpha 版本有 30 亿和 70 亿参数&#xff0c;并支持商用。 过去仅一个月&#xff0c;Stability AI 再次…

鉴权管理系统(JWT技术架构)——SpringBoot2+Vue2(一定惊喜满满,万字长文)

初衷&#xff1a; 一直不太理解整个前后端的鉴权&#xff0c;跨域等问题&#xff0c;抽空两个晚上整理出万字文章&#xff0c;也是对于自己的一个交代&#xff0c;现在共享出来&#xff0c;希望大家也能受益&#xff0c;将使用过程在这里一一详述&#xff0c;还是多说一句&…

简述 JavaScript 中 prototype

简述 JavaScript 中 prototype 这篇笔记主要捋一下这么几个概念&#xff1a; JS 的继承构造函数new 的作用及简易实现__proto__ & prototype同样的方法&#xff0c;class 和 prototype 中分别是怎么实现的 基础概念 JS 是通过 prototype chaining 实现继承的语言&#…

linux(缓冲区学习)

目录&#xff1a; 1.对进程是如何和这个进程打开文件进行关联的总结 2.标准输出和标准错误都是往显示器上打印--有何区别 3.缓冲区 --------------------------------------------------------------------------------------------------------------------------- 1.对进程是…

双模齐下,提质增效:知微携手CODING共创BizDevOps体系新篇章

为了提升工作和管理效率&#xff0c;工具建设是许多企业不得不面对的现实&#xff0c;然而在工具建设落地过程中&#xff0c;往往存在一系列的问题。如不同组织、部门之间互不相通&#xff0c;各自为政&#xff0c;工具流程与实际工作所需不符&#xff0c;导致工具建设的结果是…

做实大模型的产业价值,度小满深耕“NLP+金融”

2023年的五月&#xff0c;称得上一句AI之夏。 大模型层出不穷、扎堆发布。 这一轮由大模型推动的AI热潮中&#xff0c; NLP&#xff08;自然语言处理&#xff09;技术与金融落地场景的结合备受期待。金融行业是数字化、智能化的先行者&#xff0c;也是大模型技术落地的最佳领域…

chatgpt赋能Python-python3h怎么操作

Python3 SEO操作指南 Python3语言已成为计算机编程领域的标准和主要工具之一。SEO&#xff08;Search Engine Optimization&#xff09;是一种促进网站在搜索引擎结果中排名的技术。Python3也可以用来执行SEO操作&#xff0c;本文将介绍如何使用Python3进行SEO操作&#xff0c…

替换字符串的关键字KeywordProcessor

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 替换字符串的关键字 KeywordProcessor [太阳]选择题 以下说法错误的一项是&#xff1a; from flashtext import KeywordProcessor myKP KeywordProcessor() myKP.add_keyword(English, Math) …

别在碳排放问题上大搞双重标准!

* * * 原创&#xff1a;刘教链 * * * 隔夜比特币从26.5k一线奋力跃升&#xff0c;回升至27.5k一线。 最近美国有些人又要对比特币的碳排放搞双重标准了。说的是比特币挖矿烧掉了多少多少电力&#xff0c;折合多少多少碳排放&#xff0c;因此应当加征多少多少排放税&#xff0c…

springboot+java电影院售票订票选座推荐系统554c6

主页是注册&#xff0c;登录&#xff0c;搜索。 用户在注册之前可以进行搜索查询现在上映的和即将上映的影片信息&#xff0c;但是不能在线购票。购票需注册登录之后方可。 用户可以修改自己注册后的账户信息&#xff0c;注册成功后直接登录。退出网页后&#xff0c;取消登录信…