js 复制粘贴板,当clipboardjs 不好使怎么办?

最近项目中做一个很常见的复制粘贴的功能耽误了比较长的时间特此记录,在往常这个功能直接用 clipboard 做就行了,但是这次却发现复制功能不好使了,虽然走了复制成功的回调,但是粘贴板并没有复制的内容。代码如下

<div v-for="item in arr">...<van-button v-if="status" class="copybtn" :data-clipboard-text="item.link" >复制</van-button>...
</div>

我们这个复制按钮默认是隐藏的,用户操作之后才会出来,经过一番查询之后有文章指出,复制按钮初始化的时候元素必须存在,并且不能 "display:none"的方式隐藏。

然后修改修改代码逻辑, 按照文章指出的问题 v-if 换成v-show 也是不好使的,于是利用heigh:0来隐藏元素。测试环境测试ok。

本以为就此结束,后来上线发现,ios safari 还是不行,而且仅在线上环境复现。我一直觉得clipboardjs 这么常用的库应该不会有问题,应该是用法的问题,但因为本地的代理工具除了问题,无法抓包ios调试。给排查问题造成了较大的困难。经过几次调整尝试后仍然无法解决而且耽误较多的时间。于是转换思路,利用原生复制功能,双管齐下,但发现原生的navigator.clipboard 虽然是标准仍然有兼容性问题,安卓真机复制失败。于是有加上兼容性更好,但标准废弃的document.execCommand ,最终解决了问题针机测试ok。代码实现如下

<van-button  class="copybtn" :class="{hidden:status==0}" :data-clipboard-text="item.link" @click="copyToClipboard(item.link)">复制</van-button>
export default {mounted(){this.$nextTick(()=>{var clipboard = new Clipboard('.copybtn');clipboard.on('success', (e) => {this.$toast.success('复制成功');e.clearSelection();});clipboard.on('error', e => {this.$toast.fail('复制失败');});})     },methods:{copyToClipboard(text) {navigator.clipboard.writeText(text).then(() => {this.$toast.success('复制成功');console.log('复制成功[navigator.clipboard]:', text);}).catch(err => {console.error('复制失败:', err);this.copyForExecCommand(text) //复制失败用改用document.execCommand});},copyForExecCommand(text) {// 创建临时 textarea 元素const textarea = document.createElement('textarea');textarea.value = text;textarea.setAttribute('readonly', ''); // 设置为只读,防止 iOS 设备出现问题textarea.style.position = 'absolute';textarea.style.left = '-9999px'; // 将其放在屏幕外面document.body.appendChild(textarea);// 选择并复制内容到剪贴板textarea.select();document.execCommand('copy');// 移除临时元素document.body.removeChild(textarea);this.$toast.success('复制成功');console.log('复制成功[document.execCommand]:', text);},}
}

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

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

相关文章

java实现冒泡排序算法

文章目录 冒泡排序算法 冒泡排序算法 算法原理&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 对每一对相邻元素做同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。 针对所有的元素重…

Leetcode 345. Reverse Vowels of a String

Problem Given a string s, reverse only all the vowels in the string and return it. The vowels are ‘a’, ‘e’, ‘i’, ‘o’, and ‘u’, and they can appear in both lower and upper cases, more than once. Algorithm Collect all the vowels and reverse the…

人工智能教程(三):更多有用的 Python 库

目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在本系列的上一篇人工智能教程&#xff08;二&#xff09;&#xff1a;人工智能的历史以及再探矩阵中&#xff0c;我们回顾了人工智能的历史&#xff0c;然后详细地讨论了矩阵。在…

【数据结构和算法】--- 栈

目录 栈的概念及结构栈的实现初始化栈入栈出栈其他一些栈函数 小结栈相关的题目 栈的概念及结构 栈是一种特殊的线性表。相比于链表和顺序表&#xff0c;栈只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的…

概率论之 证明 正态分布的上a 分位点的对称的性质

公式(Z(a) -Z(1-a)) 表示正态分布的上(a)分位点与下(1-a)分位点在分布曲线上关于均值的对称性。 左侧 (Z(a))&#xff1a; 这是分布曲线上累积概率为(a)的那个点。也就是说&#xff0c;这是一个使得这个点及其左侧的面积占据整个曲线下方(a)的位置。 右侧 (Z(1-a))&#xff1…

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

文章目录 1 基础知识1.1 K8s 有用么&#xff1f;1.2 K8s 是什么&#xff1f;1.3 k8s 部署方式1.4 k8s 环境解析 2 环境部署2.1 基础环境配置2.2 容器环境操作2.3 cri环境操作2.4 harbor仓库操作2.5 k8s集群初始化2.6 k8s环境收尾操作 3 应用部署3.1 应用管理解读3.2 应用部署实…

[Firefly-RK3399] TFTP/NFS网络启动内核与Buildroot文件系统

​网络启动&#xff0c;是用 TFTP 在服务器下载内核、dtb 文件到目标机的内存中&#xff0c;同时可以用 NFS 挂载网络根文件系统到目标机上&#xff0c;实现目标机的无盘启动。 准备工作&#xff1a; Firefly-RK3399 板卡&#xff1b;路由器、网线&#xff1b;安装有 NFS 和 …

微前端 前置知识2--- monorepo架构

目录 前言 pnpm vs npm pnpm设计思想 硬连接 软链接 &#xff08;符号链接&#xff09; 原理 pnpm 指令 monorepo架构 介绍 配置monorepo pnpm --filter 前言 我们采用的是微前端一个主应用&#xff0c;和多个子应用&#xff0c;我们肯定不会一个一个去install安装…

uniapp微信小程序富文本、小程序富文本、rich-text解决video问题

我直接使用的 mp-html mp-html 相当好用&#xff0c;功能比较完善&#xff0c;也可以二次开发 具体的直接看官方文档吧

Linux安全学习路标

1. 操作系统基础知识 首先&#xff0c;你需要建立坚实的操作系统基础知识&#xff0c;包括Linux文件系统和目录结构、Linux进程管理、权限管理等基本概念。 2. 网络和通信安全 学习关于网络和通信安全的基础知识&#xff0c;包括TCP/IP协议栈、网络攻击类型、防火墙配置、网…

vscode + Linux 如何在编辑器调试webserver这类完整C++项目

1. 问题背景 网上搜的一堆文章都是教如何调试单个文件&#xff0c;或者一个文件夹下含了所有cc和头文件&#xff0c;但很多项目头文件和实现在上级目录的子文件中&#xff0c;vscode直接调试main函数所在文件时&#xff0c;直接报错某些头文件找不到(xxx.h not found 或者 und…

12.5单端口RAM,JS计数器,流水线乘法器,不重叠序列检测器(状态机+移位寄存器),信号发生器,交通灯

单端口RAM timescale 1ns/1nsmodule RAM_1port(input clk,input rst,input enb,input [6:0]addr,input [3:0]w_data,output wire [3:0]r_data );reg [6:0]mem[127:0];integer i;always (posedge clk or negedge rst) beginif(!rst) beginfor (i0; i<127 ; ii1) beginmem[i]…

Linux--权限问题(1)

前文 Linux--初识和基本的指令&#xff08;1&#xff09;-CSDN博客 Linux--初识和基本的指令&#xff08;2&#xff09;-CSDN博客 Linux--初识和基本的指令&#xff08;3&#xff09;-CSDN博客 目录 前文 前言 1.剩余指令部分 1.1 打包和压缩的其它指令 2.权限部分 2.1权…

探秘MSSQL存储过程:参数传递、错误处理、性能优化

参数传递、错误处理和性能优化是存储过程中非常重要的方面。在本节中&#xff0c;我们将深入探讨这些主题&#xff0c;并提供相应的示例代码。 1、参数传递 存储过程可以接受输入参数和输出参数&#xff0c;以便与外部代码进行交互。以下是一些常见的参数传递方式&#xff1a;…

Qt基础-程序打包发布方法

本文讲解Qt程序打包发布方法。 一、使用Qt自带的windeployqt 生成可运行的包 准备将Qt生成的exe拷入到单独的文件夹,并进行命名,本文命名为packDemorun,并将文件放到D盘(自己随意放置) 1、找到Qt自带的命令终端 2、启动命令终端 3、输入:cd /d D:\packDemorun,进入文…

IDEA删除最近打开的文件记录

IDEA删除最近打开的文件记录 遇见问题&#xff1a;如何删除IDEA中最近打开的文件记录 解决方法 先关闭IDEA 找到 recentProjects.xml 文件 windows 位置&#xff1a;&#xff08;AppData是隐藏文件夹&#xff09; 1.C:\Users\电脑用户名\AppData\Roaming\JetBrains\IntelliJIde…

Git 请输入一个提交信息以解释此合并的必要性

操作方法&#xff1a;按住Ctrl加下面的某个字母

linux-man命令的使用及练习

目录 1. 命令概述 2. 使用 3. 练习 ?man services时报错&#xff1a;No manual entry for services的解决办法 4. man命令中常用按键以及用途 1. 命令概述 Linux提供了丰富的帮助手册&#xff0c;当你需要查看某个命令的参数时不必到处上网查找&#xff0c;只要man一下即…

MySQL六 | 索引

目录 索引 优缺点 结构 语法 创建索引 查看索引 删除索引 索引 索引是帮助数据库高效获取数据的数据结构。如果没有设置索引会进行全表扫描&#xff0c;性能较低。 优缺点 优点缺点提高数据检索的效率&#xff0c;降低数据的IO成本索引列也是要占用空间的通过索引列对数…

viewPager的adapter--FragmentInstancePagerAdapter

之前分享过几个tabviewPager的库。。这种东西开发中特别常见。今天抽空补一个viewPager的adapter。用来搭配使用 创建FragmentInstancePagerAdapter,如下&#xff1a; mport androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.f…