文本复制兼容方案最佳实现落地。

news/2025/2/4 1:17:10/

文章目录

  • 一、navigator.clipboard.writeText
  • 二、方案落地
  • 总结


一、navigator.clipboard.writeText

navigator.clipboard.writeText 是一个Web API,它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的,并且设计用于提高安全性和用户体验,因为它要求网页必须是在用户交互(如点击或按键事件)的上下文中才能访问剪贴板。

样例代码如下:

// 假设你有一个按钮,用户点击它会触发文本复制
document.getElementById('copyButton').addEventListener('click', async function() {// 要复制的文本const textToCopy = '这是一段要复制到剪贴板的文本';try {// 使用 navigator.clipboard.writeText 复制文本await navigator.clipboard.writeText(textToCopy);console.log('文本已成功复制到剪贴板!');} catch (err) {console.error('无法复制文本:', err);}
});

二、方案落地

使用上面的方案会出现部署到生产环境和测试环境不生效,换成下面方法做兼容就可以了

<template><div class="box"><div class="gameId">{{ resStr }}</div><button id="copyButton" @click="copyText">复制内容</button></div><el-dialogv-model="dialogVisible"title="提示"width="500":before-close="handleClose"><span style="color: red">文本已复制</span><template #footer><div class="dialog-footer"><el-buttonstyle="width: 50px"type="primary"@click="dialogVisible = false">确定</el-button></div></template></el-dialog>
</template><script setup>
import { useRoute } from "vue-router";
import { ref } from "vue";
const route = useRoute();
const resStr = ref("");
const str = Object.values(route.query).join("");
resStr.value = JSON.parse(str).join(",");const dialogVisible = ref(false);// 开发环境这个版本可以用,生产环境需要做兼容性判断
// 复制文本
// const copyText = () => {
//   try {
//     navigator.clipboard.writeText(resStr);
//     dialogVisible.value = true;
//   } catch (err) {
//     ElMessage.error("文本复制失败");
//   }
// };// 这个是用于兼容性判断  生成环境和测试环境都兼容
async function copyText() {if ("clipboard" in navigator) {try {await navigator.clipboard.writeText(resStr.value);dialogVisible.value = true;} catch (err) {}} else {// 回退方案:使用document.execCommand('copy')const textArea = document.createElement("textarea");textArea.value = resStr.value;document.body.appendChild(textArea);textArea.select();try {const successful = document.execCommand("copy");const msg = successful ? "successful" : "unsuccessful";} catch (err) {}document.body.removeChild(textArea);}
}
</script>

总结

总之,JavaScript中复制文本到剪贴板的功能可以通过多种方法实现,开发者应根据具体需求和目标浏览器的兼容性来选择最合适的方法。同时,还需要注意安全性和用户体验方面的考虑。


http://www.ppmy.cn/news/1569105.html

相关文章

视觉状态空间模型(VMamba)的解读

在计算机视觉领域&#xff0c;设计计算高效的网络架构一直是研究的热点。今天&#xff0c;我想和大家分享一篇发表在 NIPS 2024 上的论文——VMamba&#xff1a;Visual State Space Model&#xff0c;这篇论文提出了一种新的视觉骨干网络&#xff0c;具有线性时间复杂度&#x…

【LLM-agent】(task6)构建教程编写智能体

note 构建教程编写智能体 文章目录 note一、功能需求二、相关代码&#xff08;1&#xff09;定义生成教程的目录 Action 类&#xff08;2&#xff09;定义生成教程内容的 Action 类&#xff08;3&#xff09;定义教程编写智能体&#xff08;4&#xff09;交互式操作调用教程编…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

IT运维的365天--025 H3C交换机用NTP同步正确的时间

前情提要&#xff1a;网络设备基本也都是有自己的时间的&#xff0c;如果时间不正确&#xff0c;别扭不说&#xff0c;查日志肯定就很不方便了&#xff0c;还有就是怕某些特别的应用会出错&#xff08;概率很低&#xff09;。所以&#xff0c;虽然好久都没事&#xff0c;但强迫…

《苍穹外卖》项目学习记录-Day11营业额统计

请求方式为GET方式&#xff0c;因为营业额统计本质上是一个查询类的操作&#xff0c; 查询相应的数据&#xff0c;最终把数据整合好&#xff0c;然后返回给前端。接口的请求参数有哪些&#xff0c;我们要统计营业额具体是统计哪个时间段之内的呢&#xff0c;应该通过参数传过来…

MySQL复制扩展功能

一、mysql的并行复制 1.默认情况下slave中使用的是sql单线程回放&#xff0c;在master时多用户读写&#xff0c;如果使用单线程回放会造成主从复制延迟&#xff0c;针对这个问题一般采用mysql多线程回放来解决。 在slave中设定&#xff1a; vim /etc/my.cnf [mysqld] datadir/d…

基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域发展迅猛&#xff0c;大语言模型&#xff08;LLMs&#xff09;为通用人工智能&#xff08;AGI&#xff09;的发展开辟了道路。OpenAI 的 o1 模型表现非凡&#xff0c;它引入的创新性推理时缩放技术显著提升了推理能力…