在 React 中實現全局防復制hooks

用于防止頁面內容被復制、剪切或通過右鍵菜單操作。它接受三個可配置參數:disableCopy(禁用復制,默認true)、disableCut(禁用剪切,默認true)和?disableContextMenu(禁用右鍵菜單,默認true)。通過監聽?copycut?和?contextmenu?事件并阻止默認行為來實現防復制功能,并在組件卸載時自動移除事件監聽器。該Hook使用?useEffect?管理事件監聽器的生命周期,確保只有在配置參數變化時才重新添加/移除監聽器。

?useAntiCopy - 用于在頁面中禁用復制、剪切和右鍵菜單行為的 Hook。

  • ?param options 配置項:
  • ?? ?disableCopy:是否禁用復制操作(默認 true)
  • ?? ?disableCut:是否禁用剪切操作(默認 true)
  • ?? ?disableContextMenu:是否禁用右鍵菜單(默認 true)
import { useEffect } from 'react';/*** useAntiCopy - 用于在頁面中禁用復制、剪切和右鍵菜單行為的 Hook。** @param options 配置項:*  - disableCopy:是否禁用復制操作(默認 true)*  - disableCut:是否禁用剪切操作(默認 true)*  - disableContextMenu:是否禁用右鍵菜單(默認 true)*/
interface UseAntiCopyOptions {disableCopy?: boolean;disableCut?: boolean;disableContextMenu?: boolean;
}export const useAntiCopy = (props: UseAntiCopyOptions = {}) => {const { disableCopy, disableCut, disableContextMenu } = props;// 處理復制事件const handleCopy = (e: ClipboardEvent) => {if (disableCopy) {e.preventDefault(); // 阻止默認的復制行為}};// 處理剪切事件const handleCut = (e: ClipboardEvent) => {if (disableCut) {e.preventDefault(); // 阻止默認的剪切行為}};// 處理右鍵菜單事件const handleContextMenu = (e: MouseEvent) => {if (disableContextMenu) {e.preventDefault(); // 阻止右鍵菜單彈出}};// 使用 useEffect 管理事件監聽器的生命周期useEffect(() => {// 添加事件監聽器if (disableCopy) {document.addEventListener('copy', handleCopy);}if (disableCut) {document.addEventListener('cut', handleCut);}if (disableContextMenu) {document.addEventListener('contextmenu', handleContextMenu);}// 組件卸載或 disableCopy 為 false 時移除監聽return () => {if (disableCopy) {document.removeEventListener('copy', handleCopy);}if (disableCut) {document.removeEventListener('cut', handleCut);}if (disableContextMenu) {document.removeEventListener('contextmenu', handleContextMenu);}};}, [disableCopy, disableCut, disableContextMenu]); // 依賴數組確保只有在參數變化時才重新添加/移除監聽器
};

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

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

相關文章

InfluxDB HTTP API 接口調用詳解(一)

引言 ** 在當今數字化時代,時間序列數據無處不在,從物聯網設備產生的傳感器數據,到金融領域的交易記錄,再到系統運維中的監控指標,這些數據蘊含著豐富的信息,對于企業的決策制定、業務優化以及問題排查等…

使用JMeter進行壓力測試(以黑馬點評為例、詳細圖解)

目錄 一、前言 二、使用JMeter進行壓力測試 一、前言 本博客主要記錄如何使用JMeter進行壓力測試,以黑馬點評P44利用互斥鎖解決緩存擊穿問題課程為例。至于如何完成JMeter的安裝配置及創建桌面快捷方式可以看我的另一篇博客,鏈接如下: 壓測…

舊手機部署輕量級服務器

將舊手機改造為Linux系統設備,不僅能賦予閑置設備新生,還能作為輕量級服務器、開發環境或學習平臺使用。以下是三種主流方案,涵蓋不同技術需求和安全等級,附操作步驟與避坑指南: ?? 一、三種安裝方案對比與選擇 方法…

micro avg、macro avg 和 weighted avg 的區別

問題描述: 在多分類任務的評估報告中,經常看到 micro avg、macro avg 和 weighted avg 三種平均指標,請解釋它們的區別以及各自的適用場景。🎯 參考答案: 這三種平均指標是用來評估多分類模型性能的不同方式&#xff0…

Kafka灰度方案

一、kafka灰度方案架構設計方案:1、外部生產-內部消費場景:(外部生產-內部消費)解決方案:先通過kdis分流服務---消費外部生產的消息,然后根據管理后臺-灰度配置mcs-mimp-core應用默認的環境版本&#xff0c…

深入詳解K近鄰算法(KNN)在腦部疾病診斷中的應用與實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#,Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

黑馬點評練習題-給店鋪類型查詢業務添加緩存(String和List實現)

目錄 一、前言 二、需求 三、String實現 四、List實現 一、前言 這是黑馬點評實戰篇-商戶查詢緩存-0.3緩存練習題分析,練習給店鋪類型查詢業務添加緩存。這里我自己是通過String實現的,當然在網上查詢也能夠找到其他的實現方式。String實現我會展示自…

深度學習 pytorch圖像分類(詳細版)

目錄 一、項目簡介 二、模型訓練驗證保存 三、模型測試保存csv文件 四、單張圖片預測 五、模型評估 六、ONNX導出 七、ONNX推理 八、網絡結構與數據增強可視化 上篇我介紹了具體步驟,今天就以我實際開發的一個具體項目來講: 一、項目簡介 苯人的…

《AR眼鏡上聲學的應用與挑戰》

《2025GAS聲學大講堂—音頻產業創新技術公益講座》智能眼鏡專題講座第3講將于7月24日周四19點開講,本次邀請了 珠海莫界科技有限公司 高級算法工程師 胡立天 演講,講座主題:《AR眼鏡上聲學的應用與挑戰》(點擊觀看直播&#xff09…

編譯支持cuda硬件加速的ffmpeg

本來以為很簡單,因為印象中自己在windows機器上使用過。 目前的實在一個docker環境下的ubuntu系統里。 官方操作文檔 按照官方操作文檔Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述,步驟很簡單: 1、安裝nv-c…

在資源受限單片機中使用printf等可變參函數時的陷阱(2025年7月22日)

今天分享一個我最近在項目調試中遇到的“大坑”,這個坑來自一個我們既熟悉又依賴的朋友——printf函數。故事的主角,是一顆資源極其有限的STM32F030單片機,它只有區區4KB的RAM。 一切始于便利 項目初期,為了能方便地監控程序運行狀…

大數據之Hive:Hive中week相關的幾個函數

目錄1.dayofweek函數2.weekday函數3.weekofyear函數1.dayofweek函數 功能:統計某天為星期幾 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, ..., 7 Saturday).dayofweek返回值為:1-7,1 星期…

基于深度學習Transform的steam游戲特征分析與可視化【詞云-情感詞典分析-主題分析-詞頻分析-關聯分析】

文章目錄有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主一、項目背景與研究意義二、研究目標三、研究方法與實施流程第一階段:數據采集與預處理第二階段:多維度數據分析第三階段:綜合分析與策略建議輸出四、預期…

Qwen3-8B 與 ChatGPT-4o Mini 的 TTFT 性能對比與底層原理詳解

一、模型概述與上下文支持能力 1.1 Qwen3-8B 的技術特點 Qwen3-8B 是通義實驗室推出的 80 億參數大語言模型,支持 32,768 token 的上下文長度 。其核心優化點包括: FP8 量化技術:通過將權重從 32-bit 壓縮至 8-bit,顯著降低顯存…

recvmsg函數的用法

recvmsg 是 Linux 網絡編程中用于接收消息的高級系統調用&#xff0c;支持復雜數據結構和輔助數據的接收&#xff0c;適用于 TCP/UDP/UNIX 域套接字等場景?。以下是其核心用法詳解&#xff1a;?1. 函數原型與參數?#include <sys/socket.h> ssize_t recvmsg(int sockfd…

24GSPS高速DA FMC子卡

單通道 16bit 12GSPS/ 12bit 15.5GSPS/ 8bit 24GSPS雙通道 16bit 6.2GSPS/ 12bit 7.75GSPS/ 8bit 12GS/sDAC FMC子卡基于TI公司的高速DAC數模轉換器DAC39RF12ACK和時鐘芯片LMX2594而設計的標準單槽位的FMC子卡。支持單通道模式或雙通道模式&#xff0c;單通道模式下提供16bit 1…

LabVIEW動態調用VI

該組LabVIEW程序演示4 種動態調用 VI 的實現方案&#xff0c;圍繞 HTTP GET 任務&#xff08;通過 URL 抓取數據&#xff09;&#xff0c;利用不同調用邏輯&#xff0c;適配多場景下的并行 / 串行執行需求&#xff0c;助力工程師靈活構建異步、并行化程序。各方案說明&#xff…

安裝單機版本Redis

部署操作:步驟一: 安裝Redis服務# 安裝redis操作 dnf install redis -y步驟二&#xff1a; 修改Redis相關配置vim /etc/redis/redis.conf # 83行附件&#xff0c; 修改為 * -::* 任意的服務都可以連接redis服務 bind * -::*#908行附近&#xff1a; 打開requirepass&#xff…

Java(Set接口和HashSet的分析)

Set 接口基本介紹:注意:取出的順序的順序雖然不是添加的順序&#xff0c;但是他的固定set接口的常用方法:和 List 接口一樣, Set 接口也是 Collection 的子接口&#xff0c;因此&#xff0c;常用方法和 Collection 接口一樣.set的遍歷方式:HashSet的全面說明:HashSet的暢通方法…

vscode不識別vsix結尾的插件怎么解決?

當VS Code無法識別.vsix文件時&#xff0c;可能是由于文件損壞、版本不兼容或安裝流程不正確導致的。以下是解決此問題的詳細步驟&#xff1a; 1. 確認文件完整性 重新下載.vsix文件&#xff1a;刪除現有文件&#xff0c;從可靠來源重新下載&#xff0c;確保下載過程未中斷。檢…