文本复制兼容方案最佳实现落地。
文章目录
- 一、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,它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的,并且设计用于提高安全性和用户体验&a…...
ArkTS高性能编程实践
文章目录 概述声明与表达式函数数组异常 概述 本文主要提供应用性能敏感场景下的高性能编程的相关建议,助力开发者开发出高性能的应用。高性能编程实践,是在开发过程中逐步总结出来的一些高性能的写法和建议,在业务功能实现过程中࿰…...
阿里新发的大模型Qwen2.5-max如何?
阿里新发布的大模型Qwen2.5-Max是一款性能卓越、技术先进的大型语言模型,其在多个方面展现了突出的表现。以下是基于我搜索到的资料对Qwen2.5-Max的详细评价: 技术特点 超大规模预训练数据:Qwen2.5-Max采用了超过20万亿tokens的超大规模预训…...
吴晓波 历代经济变革得失@简明“中国经济史” - 读书笔记
目录 《历代经济变革得失》读书笔记一、核心观点二、主要内容(一)导论(二)春秋战国时期(三)汉代(四)北宋(五)明清时期(六)近现代&…...
SQL GROUP BY 详解
SQL GROUP BY 详解 引言 在数据库查询中,GROUP BY 子句是一个非常有用的工具,它允许我们对查询结果进行分组,并基于这些分组进行聚合计算。本文将详细介绍 GROUP BY 的用法、注意事项以及在实际应用中的场景。 什么是 GROUP BY? GROUP BY 子句用于对查询结果进行分组。…...
走向基于大语言模型的新一代推荐系统:综述与展望
HightLight 论文题目:Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构:吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址: https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...
6 Flink 状态管理
6 Flink 状态管理 1. State-Keyed State2. State-Operator State3. Broadcast State 我们前面写的 wordcount 的例子,没有包含状态管理。如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。从容错和消…...
第1章 量子暗网中的血色黎明
月球暗面的危机与阴谋 量子隧穿效应催生的幽蓝电弧,于环形山表面肆意跳跃,仿若无数奋力挣扎的机械蠕虫,将月球暗面的死寂打破,徒增几分诡异。艾丽伫立在被遗弃的“广寒宫”量子基站顶端,机械义眼之中,倒映着…...
爬虫基础(六)代理简述
目录 一、什么是代理 二、基本原理 三、代理分类 一、什么是代理 爬虫一般是自动化的,当我们自动运行时 爬虫自动抓取数据,但一会就出现了错误: 如,您的访问频率过高! 这是因为网站的反爬措施,如果频…...
前端 Vue 性能提升策略
一、引言 前端性能优化是确保 Web 应用快速响应和流畅用户体验的关键。对于使用 Vue.js 构建的应用,性能优化不仅涉及通用的前端技术,还包括针对 Vue 特性的特定优化措施。本文将从多个方面探讨如何全面提升前端和 Vue 应用的性能。 二、前端性能优化基础 1. 减少初始加载…...
MCU内部ADC模块误差如何校准
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、ADC误差校准引言 MCU 片内 ADC 模块的误差总包括了 5 个静态参数 (静态失调,增益误差,微分非线性…...
Spring MVC消息转换器
在Spring MVC框架中,extendMessageConverters 通常与消息转换器(Message Converters)相关。消息转换器是Spring MVC用于将HTTP请求和响应主体(body)转换为Java对象和字符串的组件。它们在处理不同的媒体类型࿰…...
手写防抖函数、手写节流函数
文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。 function debou…...
【Rust自学】15.4. Drop trait:告别手动清理,释放即安全
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.4.1. Drop trait的意义 类型如果实现了Drop trait,就可以让程序员自定义当值离开作用域时发生的操作。例如文件、网络资源…...
【Block总结】CPCA,通道优先卷积注意力|即插即用
论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力(CPCA)机制,旨在解决医学图像分割中存在的低对比度和显著…...
信息学奥赛一本通 1607:【 例 2】任务安排 2 | 洛谷 P10979 任务安排 2
【题目链接】 ybt 1607:【 例 2】任务安排 2 洛谷 P10979 任务安排 2 注:ybt1607中n最大达到 1 0 4 10^4 104,洛谷P10979中n最大达到 3 ∗ 1 0 5 3*10^5 3∗105,本题解统一认为n最大达到 3 ∗ 1 0 5 3*10^5 3∗105。 【题目考点…...
AI(计算机视觉)自学路线
本文仅用来记录一下自学路线方便日后复习,如果对你自学有帮助的话也很开心o(* ̄▽ ̄*)ブ B站吴恩达机器学习->B站小土堆pytorch基础学习->opencv相关知识(Halcon或者opencv库)->四类神经网络(这里跟…...
OFDM系统仿真
1️⃣ OFDM的原理 1.1 介绍 OFDM是一种多载波调制技术,将输入数据分配到多个子载波上,每个子载波上可以独立使用 QAM、PSK 等传统调制技术进行调制。这些子载波之间互相正交,从而可以有效利用频谱并减少干扰。 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)为了能够复现数据,我们可以使用seed 来控制生成的随机数。设置seed数据来设…...
【Go语言圣经】第四节:复合数据类型
第四章:复合数据类型 本节主要讨论四种类型——数组、slice、map和结构体。 数组和结构体都是有固定内存大小的数据结构。相比之下,slice 和 map 则是动态的数据结构,它们可以根据需要动态增长。 4.1 数组 数组是一个定长的由特定类型元素…...
【Vite + Vue + Ts 项目三个 tsconfig 文件】
Vite Vue Ts 项目三个 tsconfig 文件 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件?首先我们先了解什么是 tsconfig.json ? 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件? 在使用 Vite 创建 vue-ts 模板的项目时,会发现除了 ts…...
论文和代码解读:RF-Inversion 图像/视频编辑技术
Diffusion Models专栏文章汇总:入门与实战 前言:Rectified Flow的反演和DDIM这些不太一样,上一篇博客中介绍了腾讯提出的一种方法《基于Rectified Flow FLUX的图像编辑方法 RF-Solver》,主要就是用泰勒展开和一阶导数近似来分解反演公式。这篇博客介绍谷歌提出的方法RF-Inv…...
完美还是完成?把握好度,辨证看待
完美还是完成? 如果说之前这个答案有争议,那么现在,答案毋庸置疑 ■为什么完美大于完成 ●时间成本: 做事不仅要考虑结果,还要考虑时间和精力,要说十年磨一剑的确质量更好,但是现实没有那么多…...
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! 第二阶段 当奥妮克希亚升空后,在10秒内引出50只奥妮克希亚雏龙,随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…...
3.4 Go函数作用域(标识符)
只有精准分析每个标识符的作用域范围,才能编写出优质、健壮的代码,避免逻辑错误的发生。 作用域标识符 简单来说,作用域指的是标识符可以起作用的范围,即其可见范围。将标识符的可见性限制在一定范围内,这个范围就是…...
【React】PureComponent 和 Component 的区别
前言 在 React 中,PureComponent 和 Component 都是用于创建组件的基类,但它们有一个主要的区别:PureComponent 会给类组件默认加一个shouldComponentUpdate周期函数。在此周期函数中,它对props 和 state (新老的属性/状态)会做一…...
MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)
使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入: 这样 role “read_only_role" 就获得了3个 action, 分别是 查询,列举集合,集合元数据查询 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 中,type() 是一个内置函数,用于返回对象的类型。它可以用于检查变量的类型,也可以用于动态创建新的类型。今天,我们将深入了解 type() 函数的使用方法。 1. 使用 type() 获取变量的类型 最常见的使用方式是将一个对象…...
vue 无法 局域网内访问
资料 Vue项目设置可以局域网访问_vue.js_脚本之家 过程 上午,前端vue服务能够在局域网内访问, 下午就不行了,但是后端服务能够正常访问,本机也能正常访问ip:端口号 前端服务 判定不是下面的问题: 同一…...
