javascript复制到黏贴板之完美兼容

javascript复制到黏贴板之完美兼容

很多时候我们需要给用户方便,提供一键复制的功能,但是在实现的过程中遇到各式各样的坑。

原生解决方案

document.execCommand()方法

MDN上的定义:

which allows one to run commands to manipulate the contents of the editable region.

当一个HTML文档切换到设计模式 (designMode)时,document暴露 execCommand 方法,该方法允许运行命令来操纵可编辑区域的内容。

使用方式

函数语法:

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

  • aCommandName :表示命令名称,比如: copy, cut 等(更多命令访问);
  • aShowDefaultUI:是否展示用户界面,一般为 false。Mozilla 没有实现;
  • aValueArgument:一些命令(例如insertImage)需要额外的参数(insertImage需要提供插入image的url),默认为null;

兼容性

目前除了 安卓UC浏览器Opera Mini安卓原生浏览器 外其他都支持。

使用教程

  1. 如果目标是input元素
<!--html-->
<input id="demoInput" value="hello world">
<button id="btn">点我复制</button>
<!--JavaScript-->
const btn = document.querySelector('#btn');
btn.addEventListener('click', () => {const input = document.querySelector('#demoInput');input.select();if (document.execCommand('copy')) {document.execCommand('copy');console.log('复制成功');}
})
  1. 如果目前是非input元素
<!--html-->
<button id="btn" (click)="copy()">点我复制</button>
<span id="copy-text"></span>
<!--JavaScript-->
function copy() {const content = document.getElementById('copy-text');const input = document.createElement('input');input.setAttribute('readonly', 'readonly');input.setAttribute('value', content.innerHTML);document.body.appendChild(input);input.focus();input.setSelectionRange(0, input.value.length);if (document.execCommand('copy')) {document.execCommand('copy');console.log("复制成功");} else {console.log("复制失败");}document.body.removeChild(input);
}

遇到的坑:

  1. 复制的时候,ios手机会出现键盘弹出又瞬间收回。这是因为输入框聚焦造成的。

    解决办法,增加下面一段,让input只读不能输入,就不会出现了。

    input.setAttribute('readonly', 'readonly');
    
  2. input.select()ios下不能选中全部内容,更换input.setSelectionRange(0, input.value.length);方法。

END

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

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

相关文章

制作windows启动盘-大于4GB镜像

制作windows启动盘-大于4GB镜像 制作一个 Windows 安装 U 盘是很容易的&#xff0c;使用 UltraISO 这样的刻录工具量产一个 iso 镜像文件到 U 盘即可。然而随着 Windows 10 版本号的提升&#xff0c;镜像变得越来越大&#xff0c;终于 FAT32 文件系统不再能够容纳得下安装镜像…

PC介绍之电脑组成

电脑组成 CPU cpu就是中央处理器&#xff0c;英文为central processing unit。 CPU一般我们需要知道以下几点即可&#xff1a; 主频 CPU的主频&#xff0c;即CPU内核工作的时钟频率&#xff08;CPU Clock Speed&#xff09;&#xff0c;通常所说的某某CPU是多少兆赫的&#xff…

PC介绍之PCIE、总线、内存、电源

PC介绍之PCIE、总线、内存、电源 PCIE降速 PCI-E的总线性能 目前我们所使用的显卡是x16 走 PCIE 3.0,有些显卡虽然插在x16的插槽上&#xff0c;但是速度只有x8的速度&#xff0c;总的来说好的显卡目前都是x16。 主板一般会提供一条x16&#xff0c;x8, x1三个插槽&#xff0c…

PC介绍之显卡

PC介绍之显卡 一、什么是显卡&#xff1f; 显示接口卡&#xff08;Video card&#xff0c;Graphics card&#xff09;、显示器配置卡简称为显卡&#xff0c;是个人电脑基本组成部分之一。 用途是将计算机系统所需要的显示信息进行转换驱动&#xff0c;并向显示器提供信号&…

Sublime Text 3 无法输入中文解决方案

Sublime Text 3 安装及无法输入中文解决方案 安装sublime-text 3 如果是ubuntu系统终端输入&#xff1a; wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://download.…

Linux Server 安装 raid 1

Linux Server 安装 raid 1 两组以上的N个磁盘相互作镜像&#xff0c;在一些多线程操作系统中能有很好的读取速度&#xff0c;理论上读取速度等于硬盘数量的倍数&#xff0c;与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作&#xff0c;可靠性最高。其原…

0-安装Vagrant和使用

0-安装Vagrant和使用 Vagrant 是一款软件&#xff0c;可以自动化虚拟机的安装和配置流程。用来管理虚拟机&#xff0c;如 VirtualBox、VMware、AWS等&#xff0c;主要好处是可以提供一个可配置、可移植和复用的软件环境&#xff0c;可以使用shell、chef、puppet等工具部署。所以…

什么是分布式系统的CAP理论?

什么是分布式系统的CAP理论&#xff1f; 2000年7月&#xff0c;加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后&#xff0c;麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后&#xff0c;CAP理论正式成为分布式计算领域的公认定理。 …

1-docker 介绍

1-docker 介绍 由PaaS到Container 2013年2月&#xff0c;前Gluster的CEO Ben Golub 和 dotCloud 的 CEO Solomon Hykes 坐在一起聊天时&#xff0c;Solomon谈到想把 dotCloud 内部使用的Container容器技术单独拿出来开源&#xff0c;然后围绕这个技术开一家新公司提供技术支持…

3-docker 架构和底层技术简介

3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台。 提供了一个开发、打包、运行app的平台把app和底层 infrastructure 隔离开来 根据上图我们可以看出 Docker Engine 把上层的 app 应用程序和底层的物理设备或虚拟设备进行了隔离&#xff0c;然后我们在 doc…

6-搭建一个私有registry

6-搭建一个私有registry docker hub 查找 registry docker hub registry 可以看到部署很简单&#xff0c;只有一条命令。 docker run -d -p 5000:5000 --restart always --name registry registry:2部署私有registry 找一台linux的服务器并安装好docker 在此服务器上部署re…

7-深入练习Dockerfile

7-深入练习Dockerfile 创建一个json-server 镜像 首先创建一个 json-server 文件夹 mkdir json-server在json-server文件夹下创建Dockerfile FROM node:10.15.0 RUN npm install -g json-server构建镜像 docker build -t json-server .创建一个api服务的镜像 首先创建一个 …

9-资源限制

9-资源限制 了解stress工具 stress是一个压力测试工具 docker run -it ubuntu:16.04此时会进入ubuntu内&#xff0c;这时我们安装 stress工具 apt-get update && apt-get install -y stress查看help stress --helpUsage: stress [OPTION [ARG]] ...-?, --help …

10-Docker 网络

10-Docker 网络 基础网络概念 数据传输通过数据包 两台笔记本之间通信是通过数据包通信的。想知道数据包是怎么打包的呢&#xff0c;就先要知道网络分层的概念。 网络分层 目前有两种网络分层的模型。 ISO/OSI 分层&#xff0c;也就是 7 层模型。TCP/IP 分层&#xff0c;也就…

11-Docker Bridge详解

11-Docker Bridge详解 容器之间是如何通信的&#xff1f; 操作前删除test2的容器。 查看当前机器上docker的网络 docker network lsNETWORK ID NAME DRIVER SCOPE 056d0ece100f bridge bridge local a…

15-多容器复杂应用的部署

15-多容器复杂应用的部署 此节主要是通过部署一个复杂的应用场景&#xff0c;进而练习容器的网络相关知识。 创建一个flask-web应用 创建一个 flask-web 文件夹 mkdir flask-web在此文件夹内创建 app.py 文件 cd flask-web touch app.py编写一个简单的 web 程序 import os im…

16-多机器通信

16-多机器通信 回顾上节课的思考题。 flask-redis 想访问 redis&#xff0c;该如何通信&#xff1f; 创建另外一台linux虚拟机 直接拷贝Vagrantfile文件创建一个 centos 虚拟机 我们创建一个centos7-2文件夹&#xff0c;然后创建虚拟机 vagrant up创建的过程中提示选择网络接…

17-Docker的数据持久化介绍

17-Docker的数据持久化介绍 回顾容器与镜像 容器是在镜像之上创建的一层运行时层&#xff0c;这一层是可以读写的&#xff0c;我们能够在容器内添加数据&#xff0c;读取数据。 也就是说我们在创建容器的时候&#xff0c;我们能够在容器内创建文件&#xff0c;安装软件等等&a…

在Linux中对硬盘进行分区、格式化和挂载

在Linux中对硬盘进行分区、格式化和挂载 我最近有一个全新的4-TB硬盘加入我的电脑。所以我需要在Linux中安装它。为此&#xff0c;我需要执行以下操作&#xff1a; 分区格式化挂载检查是否已安装硬盘驱动器 分区 首先&#xff0c;在通过SATA和电源线将硬盘连接到计算机后&am…

Angular gitlab持续集成之runner配置

gitlab持续集成 安装Runner 正常安装 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64sudo chmod x /usr/local/bin/gitlab-runner sudo useradd --comment GitLab Runner --creat…