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 文件系统不再能够容纳得下安装镜像…

DIY 主机 所有AMD IntelCPU及主板

DIY 主机 所有AMD IntelCPU及主板 查看intel的cpu及amd的cpu或者对应的主板可以查看这个项目。diy-pc

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等工具部署。所以…

安装 Docker Machine

安装 Docker Machine Docker Machine 支持 Windows ,OS X ,和 Linux&#xff0c;并且被安装为一个独立的二进制文件。用于各平台架构的二进制文件链接如下&#xff1a; Windows - 32bitWindows - 64bitOSX - x86_64OSX - (老款 macs)Linux - x86_64Linux - i386 github地址 O…

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

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

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

什么是分布式系统的BASE理论&#xff1f; BASE理论 eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结&#xff0c;在ACM上发表文章提出BASE理论&#xff0c;BASE理论是对CAP理论的延伸&#xff0c;核心思想是即使无法做到强一致性&#xff08;Strong Consistency&a…

Docker教程介绍

Docker教程介绍 教程环境准备 linux 系统virtualbox 软件安装 教程介绍 0-安装Vagrant&#xff0c;安装 centos 系统。1-docker 介绍2-docker 安装3-docker 架构和底层技术简介4-什么是Image和container5-Dockerfile文件6-搭建一个私有registry7-深入练习Dockerfile8-容器操…

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…

4-什么是Image和container

4-什么是Image和container 什么是Image? 先练习一个例子: docker pull ubuntu:16.04 docker image ls # 查看镜像镜像类似于一个系统安装光盘&#xff0c;你可以使用一个安装光盘为多台电脑安装操作系统&#xff0c;同样&#xff0c;你也可以用同一个镜像构建多个运行的…

5-Dockerfile文件

5-Dockerfile文件 先练习一个例子: 创建 Dockerfile 文件 FROM ubuntu:14.04 LABEL maintainer"vincent <jeffmanwordgmail.com>" RUN apt-get update && apt-get install -y redis-server EXPOSE 6397 ENTRYPOINT [ "/usr/bin/redis-server&quo…

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服务的镜像 首先创建一个 …

8-容器操作

8-容器操作 普通操作 进入容器 docker exec -it api /bin/bash容器停止与启动 docker stop api docker start api容器重启 docker restart api查看容器详细信息 docker inspect api查看日志 docker logs api容器删除 docker stop api # 必须先停止才能删除 docker rm…

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 …