使用瀏覽器的Clipboard API實現前端復制copy功能

在前端開發中,復制文本到剪貼板的功能通常使用瀏覽器的 Clipboard API 實現。比如?navigator.clipboard.writeText?方法。以下是一個簡單的案例,展示如何使用 Clipboard API 實現復制文本的功能。

基本用法

首先,你需要創建一個按鈕,當用戶點擊該按鈕時,將指定的文本通過navigator.clipboard.writeText復制到剪貼板。

<template><div><h1>案例</h1><p ref="textToCopy">要復制的內容</p><button @click="copyText">Copy Text</button></div>
</template><script>
import { ref } from 'vue';export default {setup() {const textToCopy = ref(null);const copyText = async () => {const text = textToCopy.value.textContent;try {await navigator.clipboard.writeText(text);console.log("復制成功");// $message彈出復制成功的提示} catch (err) {console.error("復制失敗:", err);// $message彈出復制失敗的提示}};return {textToCopy,copyText};}
}
</script><style scoped>
button {padding: 10px 15px;background-color: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;
}
button:hover {background-color: #45a049;
}
</style>

代碼說明

navigator.clipboard.writeText:這是現代瀏覽器提供的異步 API,用于將文本寫入剪貼板。它是異步的,因此需要使用?async/await

用戶提示:如果用戶的瀏覽器不支持?Clipboard API?或復制失敗,會拋出錯誤,因此需要用?try...catch?捕獲異常。使用?Element Plus?的?$message?提示用戶復制成功或失敗。

兼容性解決方案

(1)如果需要兼容不支持?Clipboard API?的瀏覽器,可以使用以下代碼:

<script>
import { getCurrentInstance } from 'vue';export default {setup() {const instance = getCurrentInstance();const copyToClipboardFallback = (text) => {const textarea = document.createElement('textarea');textarea.value = text;document.body.appendChild(textarea);textarea.select();try {document.execCommand('copy');instance.proxy.$message.success("復制成功!");} catch (err) {instance.proxy.$message.error("復制失敗,請手動復制!");}document.body.removeChild(textarea);};return {copyToClipboardFallback};}
}
</script>

copyToClipboardFallback?函數

該函數接受一個?text?參數,表示要復制的文本。

創建一個?<textarea>?元素,并將其值設置為傳入的文本。

將?<textarea>?元素添加到文檔的?<body>?中,并選中其中的文本。

使用?document.execCommand('copy')?嘗試復制選中的文本。

使用?try...catch?塊來處理可能的錯誤,并通過?instance.proxy.$message?顯示成功或失敗的消息。

最后,從文檔中移除?<textarea>?元素。

(2)在copyText方法中,可以添加對?navigator.clipboard?的檢查,以決定使用哪種方式:

if (navigator.clipboard && window.isSecureContext) {navigator.clipboard.writeText(text).then(() => {console.log("復制成功!");}).catch(err => {console.error("復制失敗:", err);});} else {copyToClipboardFallback(text);}

注意事項

瀏覽器支持:Clipboard API 在現代瀏覽器中得到了廣泛支持,但在某些舊版瀏覽器中可能不可用。在使用前,建議檢查瀏覽器的兼容性。

權限:某些瀏覽器可能會要求用戶授予剪貼板訪問權限。

異步操作navigator.clipboard.writeText?是一個異步函數,因此需要使用?async/await?或?.then()?來處理。

??若文章對你有幫助,點贊、收藏加關注吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80361.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【因果推斷】(二)CV中的應用

文章目錄 因果表征學習因果圖 (Causal Diagram)“后門準則”&#xff08;backdoor criterion&#xff09;和“前門準則”&#xff08;frontdoor criterion&#xff09;后門調整Visual Commonsense R-CNNCausal Intervention for Weakly-Supervised Semantic SegmentationCausal…

【iOS】alloc init new底層原理

目錄 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 類方法&#xff1a; 實例方法&#xff1a; new 前言 筆者最近在進行對OC語言源碼的學習&#xff0c;學習源碼的過程中經常會出現一些從來沒有遇見過的函數&…

QT窗口相關控件及其屬性

widget&#xff0c;PushButton&#xff0c;lineEdit等都是基于QWidget延展出來的 并不是完整的窗口&#xff0c;而是作為窗口的一部分 真正的窗口是QMainWindow 菜單欄 Qt中的菜單欄是通過QMenuBar這個類來實現的&#xff0c;一個主窗口最多只有一個菜單欄&#xff0c;位于主…

day47—雙指針-平方數之和(LeetCode-633)

題目描述 給定一個非負整數 c &#xff0c;你要判斷是否存在兩個整數 a 和 b&#xff0c;使得 a^2 b^2 c 。 示例 1&#xff1a; 輸入&#xff1a;c 5 輸出&#xff1a;true 解釋&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 輸入&#xff1a;c 3 輸出&#xff1a;f…

藍橋杯 20. 壓縮變換

壓縮變換 原題目鏈接 題目描述 小明最近在研究壓縮算法。他知道&#xff0c;壓縮時如果能夠使數值很小&#xff0c;就能通過熵編碼得到較高的壓縮比。然而&#xff0c;要使數值變小是一個挑戰。 最近&#xff0c;小明需要壓縮一些正整數序列&#xff0c;這些序列的特點是&a…

element-ui多個form同時驗證,以及動態循環表單注意事項

多個form同時驗證&#xff1a; validateForm(refs) {if (!refs) {return false}return new Promise((resolve, reject) > {refs.validate().then((valid) > {resolve(valid)}).catch((val) > {resolve(false)})}) }, async handleConfirm() {Promise.all([this.valid…

Spring Boot中自定義404異常處理問題學習筆記

1. 問題背景 在Spring Boot項目中&#xff0c;需要手動返回404異常給前端。為此&#xff0c;我創建了一個自定義的404異常類UnauthorizedAccessException&#xff0c;并在全局異常處理器GlobalExceptionHandler中處理該異常。然而&#xff0c;在使用Postman測試時&#xff0c;…

你學會了些什么220622?--搭建UI自動化

jenkins訪問地址&#xff1a;http://192.168.82.129:8080/ 賬號密碼&#xff1a;admin/a123456a ***** 什么是UI自動化** 使用工具或者腳本對需要測試的軟件的前端界面在預設的條件下&#xff0c;在已有的測試數據下運行系統或者應用程序&#xff0c;并獲取其前端頁面UI顯示的…

【2025計算機網絡-面試常問】http和https區別是什么,http的內容有哪些,https用的是對稱加密還是非對稱加密,流程是怎么樣的

HTTP與HTTPS全面對比及HTTPS加密流程詳解 一、HTTP與HTTPS核心區別 特性HTTPHTTPS協議基礎明文傳輸HTTP SSL/TLS加密層默認端口80443加密方式無加密混合加密&#xff08;非對稱對稱&#xff09;證書要求不需要需要CA頒發的數字證書安全性易被竊聽、篡改、冒充防竊聽、防篡改…

JavaFX 第一篇 Hello World

1、簡介 JavaFX 是一個用于構建客戶端應用程序的 Java 庫&#xff0c;作為 Java 標準庫的一部分&#xff08;JDK 8 到 10&#xff09;&#xff0c;從 JDK 11 開始&#xff0c;JavaFX 將以獨立模塊發布&#xff0c;將不再包含在 JDK標準庫中&#xff0c;他是 Java 應用程序開發的…

SQL實戰:02之連續數問題求解

文章目錄 概述題目:體育館的人流量題解步驟一&#xff1a;構造出一個連續序列步驟二&#xff1a;找出符合條件的組的序號步驟三&#xff1a;fetch結果&#xff0c;使用內連接過濾出符合條件的記錄。完整SQL 題目二&#xff1a;連續出現的數字題解步驟一&#xff1a;分區并構建連…

STM32 的 GPIO和中斷

GPIO的簡單介紹 內部結構 施密特觸發器&#xff08;TTL肖特基觸發器&#xff09; 的工作原理&#xff1a; 施密特觸發電路&#xff08;簡稱&#xff09;是一種波形整形電路&#xff0c;當任何波形的信號進入電路時&#xff0c;輸出在正、負飽和之間跳動&#xff0c;產生方波或…

Server - 優雅的配置服務器 Bash 環境(.bashrc)

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/147335592 免責聲明&#xff1a;本文來源于個人知識與公開資料&#xff0c;僅用于學術交流&#xff0c;歡迎討論&#xff0c;不支持轉載。 登錄服…

使用PyTorch實現圖像增廣與模型訓練實戰

本文通過完整代碼示例演示如何利用PyTorch和torchvision實現常用圖像增廣方法&#xff0c;并在CIFAR-10數據集上訓練ResNet-18模型。我們將從基礎圖像變換到復雜數據增強策略逐步講解&#xff0c;最終實現一個完整的訓練流程。 一、圖像增廣基礎操作 1.1 準備工作 #matplotli…

解決Mac 安裝 PyICU 依賴失敗

失敗日志&#xff1a; 解決辦法 1、使用 homebrew 安裝相關依賴 brew install icu4c 安裝完成后&#xff0c;設置環境變量 echo export PATH"/opt/homebrew/opt/icu4c77/bin:$PATH" >> ~/.zshrcecho export PATH"/opt/homebrew/opt/icu4c77/sbin:$PATH…

Springboot后端查詢參數接收

1.實現方式 假設前端發送的接口&#xff1a; /users?nameJohn&age30 后端怎么接收里面的name和age呢&#xff1f;以及再發別的參數后端怎么接收呢&#xff1f; 1.比較簡單的方式 當控制器方法的參數類型是簡單類型&#xff08;如 String、Integer、Long 等&#xff09…

桌面應用中VUE使用新瀏覽器窗口打開頁面

1、瀏覽器應用忽略此方式&#xff0c;可任意方式打開。針對桌面應用設置 newWindowClick(){try {this.fileUrl "";this.params.year ""this.params.date ""axios({method: post,url: /url/pdf/preview,data: this.params,}).then(res> {t…

華為手機怎么進行音頻降噪?音頻降噪技巧分享:提升聽覺體驗

在當今數字化時代&#xff0c;音頻質量對于提升用戶體驗至關重要&#xff0c;無論是在通話、視頻錄制還是音頻文件播放中&#xff0c;清晰的音頻都能帶來更佳的聽覺享受。 而華為手機憑借其強大的音頻處理技術&#xff0c;為用戶提供了多種音頻降噪功能&#xff0c;幫助用戶在…

【數據可視化-22】脫發因素探索的可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

青少年編程與數學 02-018 C++數據結構與算法 06課題、樹

青少年編程與數學 02-018 C數據結構與算法 06課題、樹 一、樹(Tree)1. 樹的定義2. 樹的基本術語3. 常見的樹類型4. 樹的主要操作5. 樹的應用 二、二叉樹(Binary Tree)1. 二叉樹的定義2. 二叉樹的基本術語3. 二叉樹的常見類型4. 二叉樹的主要操作5. 二叉樹的實現代碼說明輸出示例…