当前位置: 首页 > article >正文

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

文章目录

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

相关文章:

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

文章目录 一、navigator.clipboard.writeText二、方案落地总结 一、navigator.clipboard.writeText navigator.clipboard.writeText 是一个Web API&#xff0c;它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的&#xff0c;并且设计用于提高安全性和用户体验&a…...

ArkTS高性能编程实践

文章目录 概述声明与表达式函数数组异常 概述 本文主要提供应用性能敏感场景下的高性能编程的相关建议&#xff0c;助力开发者开发出高性能的应用。高性能编程实践&#xff0c;是在开发过程中逐步总结出来的一些高性能的写法和建议&#xff0c;在业务功能实现过程中&#xff0…...

阿里新发的大模型Qwen2.5-max如何?

阿里新发布的大模型Qwen2.5-Max是一款性能卓越、技术先进的大型语言模型&#xff0c;其在多个方面展现了突出的表现。以下是基于我搜索到的资料对Qwen2.5-Max的详细评价&#xff1a; 技术特点 超大规模预训练数据&#xff1a;Qwen2.5-Max采用了超过20万亿tokens的超大规模预训…...

吴晓波 历代经济变革得失@简明“中国经济史” - 读书笔记

目录 《历代经济变革得失》读书笔记一、核心观点二、主要内容&#xff08;一&#xff09;导论&#xff08;二&#xff09;春秋战国时期&#xff08;三&#xff09;汉代&#xff08;四&#xff09;北宋&#xff08;五&#xff09;明清时期&#xff08;六&#xff09;近现代&…...

SQL GROUP BY 详解

SQL GROUP BY 详解 引言 在数据库查询中,GROUP BY 子句是一个非常有用的工具,它允许我们对查询结果进行分组,并基于这些分组进行聚合计算。本文将详细介绍 GROUP BY 的用法、注意事项以及在实际应用中的场景。 什么是 GROUP BY? GROUP BY 子句用于对查询结果进行分组。…...

走向基于大语言模型的新一代推荐系统:综述与展望

HightLight 论文题目&#xff1a;Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构&#xff1a;吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址&#xff1a; https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...

6 Flink 状态管理

6 Flink 状态管理 1. State-Keyed State2. State-Operator State3. Broadcast State 我们前面写的 wordcount 的例子&#xff0c;没有包含状态管理。如果一个task在处理过程中挂掉了&#xff0c;那么它在内存中的状态都会丢失&#xff0c;所有的数据都需要重新计算。从容错和消…...

第1章 量子暗网中的血色黎明

月球暗面的危机与阴谋 量子隧穿效应催生的幽蓝电弧&#xff0c;于环形山表面肆意跳跃&#xff0c;仿若无数奋力挣扎的机械蠕虫&#xff0c;将月球暗面的死寂打破&#xff0c;徒增几分诡异。艾丽伫立在被遗弃的“广寒宫”量子基站顶端&#xff0c;机械义眼之中&#xff0c;倒映着…...

爬虫基础(六)代理简述

目录 一、什么是代理 二、基本原理 三、代理分类 一、什么是代理 爬虫一般是自动化的&#xff0c;当我们自动运行时 爬虫自动抓取数据&#xff0c;但一会就出现了错误&#xff1a; 如&#xff0c;您的访问频率过高&#xff01; 这是因为网站的反爬措施&#xff0c;如果频…...

前端 Vue 性能提升策略

一、引言 前端性能优化是确保 Web 应用快速响应和流畅用户体验的关键。对于使用 Vue.js 构建的应用,性能优化不仅涉及通用的前端技术,还包括针对 Vue 特性的特定优化措施。本文将从多个方面探讨如何全面提升前端和 Vue 应用的性能。 二、前端性能优化基础 1. 减少初始加载…...

MCU内部ADC模块误差如何校准

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、ADC误差校准引言 MCU 片内 ADC 模块的误差总包括了 5 个静态参数 (静态失调&#xff0c;增益误差&#xff0c;微分非线性…...

Spring MVC消息转换器

在Spring MVC框架中&#xff0c;extendMessageConverters 通常与消息转换器&#xff08;Message Converters&#xff09;相关。消息转换器是Spring MVC用于将HTTP请求和响应主体&#xff08;body&#xff09;转换为Java对象和字符串的组件。它们在处理不同的媒体类型&#xff0…...

手写防抖函数、手写节流函数

文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内事件又被触发&#xff0c;则重新计时。这可以使用在一些点击请求的事件上&#xff0c;避免因为用户的多次点击向后端发送多次请求。 function debou…...

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.4.1. Drop trait的意义 类型如果实现了Drop trait&#xff0c;就可以让程序员自定义当值离开作用域时发生的操作。例如文件、网络资源…...

【Block总结】CPCA,通道优先卷积注意力|即插即用

论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力&#xff08;CPCA&#xff09;机制&#xff0c;旨在解决医学图像分割中存在的低对比度和显著…...

信息学奥赛一本通 1607:【 例 2】任务安排 2 | 洛谷 P10979 任务安排 2

【题目链接】 ybt 1607&#xff1a;【 例 2】任务安排 2 洛谷 P10979 任务安排 2 注&#xff1a;ybt1607中n最大达到 1 0 4 10^4 104&#xff0c;洛谷P10979中n最大达到 3 ∗ 1 0 5 3*10^5 3∗105&#xff0c;本题解统一认为n最大达到 3 ∗ 1 0 5 3*10^5 3∗105。 【题目考点…...

AI(计算机视觉)自学路线

本文仅用来记录一下自学路线方便日后复习&#xff0c;如果对你自学有帮助的话也很开心o(*&#xffe3;▽&#xffe3;*)ブ B站吴恩达机器学习->B站小土堆pytorch基础学习->opencv相关知识&#xff08;Halcon或者opencv库&#xff09;->四类神经网络&#xff08;这里跟…...

OFDM系统仿真

1️⃣ OFDM的原理 1.1 介绍 OFDM是一种多载波调制技术&#xff0c;将输入数据分配到多个子载波上&#xff0c;每个子载波上可以独立使用 QAM、PSK 等传统调制技术进行调制。这些子载波之间互相正交&#xff0c;从而可以有效利用频谱并减少干扰。 1.2 OFDM的核心 多载波调制…...

torch numpy seed使用方法

1 import numpy as np np.random.seed(500) np.random.rand(5)array([0.69367953, 0.06171699, 0.6666116 , 0.55920894, 0.08511062])import torch torch.manual_seed(500) torch.rand(5)为了能够复现数据&#xff0c;我们可以使用seed 来控制生成的随机数。设置seed数据来设…...

【Go语言圣经】第四节:复合数据类型

第四章&#xff1a;复合数据类型 本节主要讨论四种类型——数组、slice、map和结构体。 数组和结构体都是有固定内存大小的数据结构。相比之下&#xff0c;slice 和 map 则是动态的数据结构&#xff0c;它们可以根据需要动态增长。 4.1 数组 数组是一个定长的由特定类型元素…...

【Vite + Vue + Ts 项目三个 tsconfig 文件】

Vite Vue Ts 项目三个 tsconfig 文件 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件&#xff1f;首先我们先了解什么是 tsconfig.json ? 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件&#xff1f; 在使用 Vite 创建 vue-ts 模板的项目时&#xff0c;会发现除了 ts…...

论文和代码解读:RF-Inversion 图像/视频编辑技术

Diffusion Models专栏文章汇总:入门与实战 前言:Rectified Flow的反演和DDIM这些不太一样,上一篇博客中介绍了腾讯提出的一种方法《基于Rectified Flow FLUX的图像编辑方法 RF-Solver》,主要就是用泰勒展开和一阶导数近似来分解反演公式。这篇博客介绍谷歌提出的方法RF-Inv…...

完美还是完成?把握好度,辨证看待

完美还是完成&#xff1f; 如果说之前这个答案有争议&#xff0c;那么现在&#xff0c;答案毋庸置疑 ■为什么完美大于完成 ●时间成本&#xff1a; 做事不仅要考虑结果&#xff0c;还要考虑时间和精力&#xff0c;要说十年磨一剑的确质量更好&#xff0c;但是现实没有那么多…...

Many Whelps! Handle It! (10 player) Many Whelps! Handle It! (25 player)

http://db.nfuwow.com/80/?achievement4403 http://db.nfuwow.com/80/?achievement4406 最少扣你50DKP! 第二阶段 当奥妮克希亚升空后&#xff0c;在10秒内引出50只奥妮克希亚雏龙&#xff0c;随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…...

3.4 Go函数作用域(标识符)

只有精准分析每个标识符的作用域范围&#xff0c;才能编写出优质、健壮的代码&#xff0c;避免逻辑错误的发生。 作用域标识符 简单来说&#xff0c;作用域指的是标识符可以起作用的范围&#xff0c;即其可见范围。将标识符的可见性限制在一定范围内&#xff0c;这个范围就是…...

【React】PureComponent 和 Component 的区别

前言 在 React 中&#xff0c;PureComponent 和 Component 都是用于创建组件的基类&#xff0c;但它们有一个主要的区别&#xff1a;PureComponent 会给类组件默认加一个shouldComponentUpdate周期函数。在此周期函数中&#xff0c;它对props 和 state (新老的属性/状态)会做一…...

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入&#xff1a; 这样 role “read_only_role" 就获得了3个 action&#xff0c; 分别是 查询&#xff0c;列举集合&#xff0c;集合元数据查询 P.S: 如果没有 …...

fastadmin中require-form.js的data-favisible控制显示隐藏

只要在任意元素上添加data-favisible属性就可以轻松的控制显示隐藏了 其中reportype是php传到前端的一个变量??? <div class"form-group" data-favisible"reportype6"><label class"control-label col-xs-12 col-sm-2">{:__(Ove_…...

Day51:type()函数

在 Python 中&#xff0c;type() 是一个内置函数&#xff0c;用于返回对象的类型。它可以用于检查变量的类型&#xff0c;也可以用于动态创建新的类型。今天&#xff0c;我们将深入了解 type() 函数的使用方法。 1. 使用 type() 获取变量的类型 最常见的使用方式是将一个对象…...

vue 无法 局域网内访问

资料 Vue项目设置可以局域网访问_vue.js_脚本之家 过程 上午&#xff0c;前端vue服务能够在局域网内访问&#xff0c; 下午就不行了&#xff0c;但是后端服务能够正常访问&#xff0c;本机也能正常访问ip&#xff1a;端口号 前端服务 判定不是下面的问题&#xff1a; 同一…...