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.pswp.cn/news/536057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536057.shtml
英文地址,請注明出處:http://en.pswp.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 …