JS 實(shí)現(xiàn)復(fù)制到剪貼板的幾種方式小結(jié)
一、Clipboard API
在現(xiàn)代 Web 開(kāi)發(fā)中,復(fù)制文本到剪切板是一個(gè)常見(jiàn)的需求,特別是在一些社交分享、復(fù)制鏈接等場(chǎng)景下。通過(guò) JavaScript,我們可以輕松實(shí)現(xiàn)這一功能。
Clipboard API 是現(xiàn)代瀏覽器提供的一組 JavaScript 接口,用于訪問(wèn)和操作用戶(hù)剪貼板中的內(nèi)容。它提供了異步讀取和寫(xiě)入剪貼板的功能,可以處理多種類(lèi)型的數(shù)據(jù),如文本、圖像等。通過(guò)使用navigator.clipboard對(duì)象,開(kāi)發(fā)者可以調(diào)用相關(guān)方法來(lái)讀取和寫(xiě)入剪貼板中的內(nèi)容。
相關(guān)屬性方法
屬性:
clipboardData:表示剪貼板中的數(shù)據(jù)對(duì)象。
types:返回剪貼板中數(shù)據(jù)的類(lèi)型列表。
方法:
readText():異步讀取剪貼板中的文本內(nèi)容。
writeText(text):異步將文本內(nèi)容寫(xiě)入剪貼板。
read():異步讀取剪貼板中的數(shù)據(jù)對(duì)象。
write(data):異步將自定義數(shù)據(jù)對(duì)象寫(xiě)入剪貼板。
示例
const copyText = () => {
const text = "Hello, Clipboard API!";
navigator.clipboard
.writeText(text)
.then(() => {
console.log("Text copied to clipboard");
})
.catch((error) => {
console.error("Failed to copy text: ", error);
});
};
二、document.execCommand
document.execCommand()是一個(gè)舊的瀏覽器 API,用于執(zhí)行命令并影響瀏覽器行為。其中包括一些與剪貼板相關(guān)的命令,如復(fù)制、粘貼等。
通過(guò)調(diào)用document.execCommand('copy')或document.execCommand('paste')等命令,可以實(shí)現(xiàn)對(duì)剪貼板內(nèi)容進(jìn)行讀取或?qū)懭搿?/p>
const copyText = () => {
const text = "Hello, Clipboard!";
const textarea = document.createElement("textarea");
textarea.value = text;
textarea.style.position = "absolute";
textarea.style.opacity = "0";
document.body.appendChild(textarea);
textarea.select();
document.execCommand("copy");
document.body.removeChild(textarea);
};
優(yōu)點(diǎn):
使用簡(jiǎn)單,無(wú)需額外引入 API。
兼容性好。
如下圖所示的瀏覽器兼容性

缺點(diǎn):
功能相對(duì)有限,只能處理文本類(lèi)型的數(shù)據(jù)。
不支持異步操作。
安全性和用戶(hù)隱私保護(hù)較差。
需要注意的是,document.execCommand()在現(xiàn)代瀏覽器中已經(jīng)被廢棄,不再推薦使用。而 Clipboard API 是未來(lái)發(fā)展的趨勢(shì),提供了更好的功能和安全性。
因此,在支持 Clipboard API 的瀏覽器中,建議使用 Clipboard API 來(lái)進(jìn)行剪貼板操作。對(duì)于不支持 Clipboard API 的瀏覽器,可以使用document.execCommand()作為降級(jí)方案。
三、useClipboard
檢測(cè)瀏覽器是否支持
navigator.clipboard:
const isClipboardSupported = () => {
return (
!!navigator.clipboard && typeof navigator.clipboard.writeText === "function"
);
};
創(chuàng)建一個(gè)名為
fallbackCopyText的函數(shù),用于在不支持 Clipboard API 的瀏覽器中實(shí)現(xiàn)復(fù)制功能:
const fallbackCopyText = (text) => {
const textarea = document.createElement("textarea");
textarea.value = text;
textarea.style.position = "absolute";
textarea.style.opacity = "0";
document.body.appendChild(textarea);
textarea.select();
document.execCommand("copy");
textarea.remove();
};
在自定義 hooks 中,根據(jù)瀏覽器是否支持 Clipboard API 來(lái)選擇使用哪種復(fù)制方式:
const useClipboard = () => {
const copied = ref(false);
const copyText = (text) => {
if (isClipboardSupported()) {
navigator.clipboard
.writeText(text)
.then(() => {
copied.value = true;
})
.catch((error) => {
console.error("Failed to copy text: ", error);
});
} else {
fallbackCopyText(text);
copied.value = true;
}
};
return { copied, copyText };
};
通過(guò)以上降級(jí)方案,我們首先檢測(cè)瀏覽器是否支持navigator.clipboard。如果支持,則使用navigator.clipboard.writeText()來(lái)復(fù)制文本。如果不支持,則調(diào)用fallbackCopyText()函數(shù)來(lái)實(shí)現(xiàn)復(fù)制功能。
在使用自定義 hooks 的 Vue 組件中,無(wú)需更改任何代碼,因?yàn)樽远x hooks 已經(jīng)處理了瀏覽器兼容性問(wèn)題。無(wú)論瀏覽器是否支持 Clipboard API,都可以正常使用復(fù)制功能。
降級(jí)方案中的fallbackCopyText()函數(shù)使用了document.execCommand('copy')來(lái)執(zhí)行復(fù)制操作。這是一種舊的方式,在現(xiàn)代瀏覽器中仍然有效,但并不推薦使用。因此,在支持 Clipboard API 的瀏覽器中,盡量?jī)?yōu)先使用navigator.clipboard.writeText()來(lái)實(shí)現(xiàn)復(fù)制功能。
總結(jié)
在文章中,我們首先介紹了復(fù)制文本到剪切板的兩種方法:使用 document.execCommand 方法和使用 Clipboard API。對(duì)于 execCommand 方法,我們?cè)敿?xì)介紹了其使用步驟和注意事項(xiàng),并提供了一個(gè)示例代碼。對(duì)于 Clipboard API,我們介紹了其基本概念和使用方法,同時(shí)也提到了瀏覽器兼容性的問(wèn)題。
然后,我們對(duì)比了這兩種方法的優(yōu)缺點(diǎn)。execCommand 方法雖然簡(jiǎn)單易用,但是在某些瀏覽器中可能存在兼容性問(wèn)題。而 Clipboard API 雖然相對(duì)復(fù)雜一些,但是它是瀏覽器原生支持的 API,并且具有更好的擴(kuò)展性和安全性。
到此這篇關(guān)于JS 實(shí)現(xiàn)復(fù)制到剪貼板的幾種方式小結(jié)的文章就介紹到這了,更多相關(guān)JS 復(fù)制到剪貼板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS復(fù)制到剪貼板示例代碼
- 用js將內(nèi)容復(fù)制到剪貼板兼容瀏覽器
- js實(shí)現(xiàn)點(diǎn)擊后將文字或圖片復(fù)制到剪貼板的方法
- JavaScript實(shí)現(xiàn)復(fù)制或剪切內(nèi)容到剪貼板功能的方法
- JS實(shí)現(xiàn)復(fù)制內(nèi)容到剪貼板功能兼容所有瀏覽器(推薦)
- js復(fù)制內(nèi)容到剪貼板代碼,js復(fù)制代碼的簡(jiǎn)單實(shí)例
- js實(shí)現(xiàn)各種復(fù)制到剪貼板的方法(分享)
- JS實(shí)現(xiàn)復(fù)制內(nèi)容到剪貼板功能
- JavaScript復(fù)制內(nèi)容到剪貼板的兩種常用方法
- JavaScript實(shí)現(xiàn)一鍵復(fù)制內(nèi)容剪貼板
- JavaScript復(fù)制文案到剪貼板小技巧
- vue中js實(shí)現(xiàn)點(diǎn)擊復(fù)制文本到剪貼板的3種方案
相關(guān)文章
js動(dòng)態(tài)設(shè)置鼠標(biāo)事件示例代碼
動(dòng)態(tài)設(shè)置鼠標(biāo)事件的方法有很多,接下來(lái)為大家介紹下js中是如何做到的,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
Bootstrap的aria-label和aria-labelledby屬性實(shí)例詳解
這篇文章主要介紹了Bootstrap的aria-label和aria-labelledby屬性實(shí)例詳解,需要的朋友可以參考下2018-11-11
使用JavaScrip實(shí)現(xiàn)一個(gè)記憶函數(shù)
在編程的世界里,性能優(yōu)化始終是一個(gè)重要的話(huà)題,今天,我們將一起來(lái)實(shí)現(xiàn)一個(gè)實(shí)用的記憶函數(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一2024-11-11
uni-file-picker文件選擇上傳功能實(shí)現(xiàn)代碼
本文介紹了uni-file-picker的基礎(chǔ)使用方法,包括選擇圖片的九宮格樣式、限制選擇的圖片數(shù)量、指定圖片類(lèi)型及后綴,以及如何自定義上傳時(shí)機(jī),詳細(xì)說(shuō)明了如何通過(guò)設(shè)置不同的屬性來(lái)實(shí)現(xiàn)圖片的選擇和上傳,適用于需要在應(yīng)用中上傳圖片的開(kāi)發(fā)者2024-09-09
svg插入foreignObject無(wú)法響應(yīng)事件解決
這篇文章主要為大家介紹了svg插入foreignObject無(wú)法響應(yīng)事件解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
JavaScript閉包函數(shù)訪問(wèn)外部變量的方法
這篇文章主要介紹了JavaScript閉包函數(shù)訪問(wèn)外部變量的方法,本文使用匿名函數(shù)來(lái)實(shí)現(xiàn)在閉包中訪問(wèn)外部變量,需要的朋友可以參考下2014-08-08
輕松實(shí)現(xiàn)js彈框顯示選項(xiàng)
這篇文章主要為大家詳細(xì)介紹了js輕松實(shí)現(xiàn)彈框顯示選項(xiàng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
javascript實(shí)現(xiàn)文本域?qū)懭胱址麜r(shí)限定字?jǐn)?shù)
這篇文章主要介紹了javascript實(shí)現(xiàn)文本域的寫(xiě)入字符個(gè)數(shù)限定字?jǐn)?shù),需要的朋友可以參考下2014-02-02

