news 2026/1/31 3:39:24

Electron 禁止复制粘帖

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Electron 禁止复制粘帖
const{app,BrowserWindow}=require('electron');functioncreateWindow(){constmainWindow=newBrowserWindow({width:800,height:600,webPreferences:{nodeIntegration:false,contextIsolation:true,sandbox:true,// 增强安全性webSecurity:true// 确保远程内容的安全性}});// 加载远程网站mainWindow.loadURL('https://example.com').catch(err=>{console.error('Failed to load URL:',err);});// 方法1: 拦截键盘复制快捷键mainWindow.webContents.on('before-input-event',(event,input)=>{if(input.type==='keyDown'){constisCopy=(input.key==='c'||input.key==='C')&&(input.control||input.meta);constisPaste=(input.key==='v'||input.key==='V')&&(input.control||input.meta);if(isCopy||isPaste){console.log('Blocked copy/paste attempt');event.preventDefault();}}});// 方法2: 禁用右键菜单mainWindow.webContents.on('context-menu',(e,props)=>{e.preventDefault();});// 方法3: 当页面加载完成后注入保护措施mainWindow.webContents.on('did-finish-load',()=>{mainWindow.webContents.executeJavaScript(`// 禁用选择 document.body.style.cssText += '-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;'; // 拦截复制事件 document.addEventListener('copy', (e) => { e.preventDefault(); e.clipboardData.setData('text/plain', ''); return false; }, true); // 拦截选择开始 document.addEventListener('selectstart', (e) => { e.preventDefault(); return false; }, true); // 禁用拖拽 document.addEventListener('dragstart', (e) => { e.preventDefault(); return false; }, true);`).catch(err=>{console.error('JavaScript injection failed:',err);});});// 方法4: 监控开发者工具(可选)mainWindow.webContents.on('devtools-opened',()=>{console.log('DevTools opened - might bypass protections');});}app.whenReady().then(()=>{createWindow();app.on('activate',()=>{if(BrowserWindow.getAllWindows().length===0)createWindow();});});app.on('window-all-closed',()=>{if(process.platform!=='darwin')app.quit();});

针对你的环境优化后的特点:

  1. Electron 34.3.0 兼容性

    • 这个版本是较新的,支持所有提到的 API。
    • 使用了did-finish-load替代dom-ready,因为对于远程网站更可靠。
  2. 远程网站处理

    • 添加了错误处理,确保加载失败时有提示。
    • 使用executeJavaScript在页面加载后注入保护代码,因为直接的 CSS 注入可能被远程网站的 CSP 阻止。
  3. 全面的复制防护

    • 阻止键盘快捷键(Ctrl+C / Command+C)
    • 禁用右键菜单
    • 禁止文本选择
    • 清空剪贴板数据
    • 阻止拖拽复制

可能的限制和解决方法:

  1. CSP(内容安全策略)

    • 如果远程网站启用了严格的 CSP,executeJavaScript可能失败。
    • 解决:将远程内容加载到本地代理,或联系网站管理员调整 CSP。
  2. 网站自身的 JavaScript

    • 远程网站可能覆盖我们的保护措施。
    • 解决:使用更高的优先级事件监听(true参数表示捕获阶段)。
  3. 用户绕过

    • 用户仍可通过截屏或开发者工具复制。
    • 解决:无法完全阻止,但可以通过检测 DevTools 打开来警告。

测试步骤:

  1. 用你的实际远程 URL 替换'https://example.com'
  2. 运行应用(确保使用electron-builder打包或直接用electron .)。
  3. 尝试:
    • Ctrl+C / Command+C
    • 右键复制
    • 选择文本
    • 拖拽文本
  4. 检查控制台输出是否有错误或阻止日志。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/26 0:18:54

Muview2:专业级磁性数据可视化分析工具

Muview2:专业级磁性数据可视化分析工具 【免费下载链接】Muview2 3D visualization of micromagnetic simulation data from Mumax or OOMMF 项目地址: https://gitcode.com/gh_mirrors/mu/Muview2 磁性数据分析的技术革命 在当今前沿磁学研究和材料科学领域…

作者头像 李华
网站建设 2026/1/25 15:03:13

ALU+FPGA协同设计:完整指南(含测试平台)

从零搭建一个可重构ALU:FPGA上的算术逻辑单元实战指南你有没有想过,计算机最底层的“大脑”——那个负责加减乘除和逻辑判断的核心模块,其实可以自己动手设计?今天我们就来干一件硬核的事:在FPGA上亲手实现一个完全可定…

作者头像 李华
网站建设 2026/1/26 0:16:40

ESP芯片唯一标识符操作指南:从问题到解决方案

你遇到了什么设备身份识别难题? 【免费下载链接】esptool 项目地址: https://gitcode.com/gh_mirrors/esp/esptool 在物联网项目开发中,你是否经常遇到这样的困扰: 批量生产时,几十上百个ESP设备堆在一起,完全…

作者头像 李华
网站建设 2026/1/25 23:20:42

医学影像分析新纪元:FAE平台让放射组学研究触手可及

医学影像分析新纪元:FAE平台让放射组学研究触手可及 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 在当今医疗AI快速发展的时代,医学影像分析已成为临床诊断和科研的重要支柱。然而,复杂的…

作者头像 李华
网站建设 2026/1/26 14:35:15

RS232与PLC通信实战案例:超详细版教程

RS232与PLC通信实战:从接线到代码的完整指南在工业自动化现场,你是否曾遇到这样的场景?一台老旧的PLC设备没有网口,只能通过一个小小的DB9串口进行数据交互。而你的工控机或上位软件却迟迟收不到回应——是线接错了?波…

作者头像 李华
网站建设 2026/1/26 13:42:30

GPT-SoVITS能否支持超长文本输入?极限测试结果

GPT-SoVITS 能否支持超长文本输入?极限测试结果 在语音合成技术飞速发展的今天,个性化“声音克隆”已不再是科幻电影中的桥段。只需一段几十秒的录音,AI 就能模仿你的音色、语调,甚至情感,为你朗读任意文字——这正是 …

作者头像 李华