news 2026/5/6 16:21:45

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/5/1 7:49:19

PDFtoPrinter:Windows环境下的高效PDF打印终极解决方案

还在为PDF文件打印而烦恼吗?传统的PDF阅读器不仅体积庞大,而且打印功能往往受到限制。现在,通过PDFtoPrinter这款轻量级开源工具,你可以在Windows环境下实现快速、高效的PDF文件打印,无需安装任何第三方软件。 【免费下…

作者头像 李华
网站建设 2026/5/1 5:49:13

5个核心技巧:掌握Gephi图可视化与网络分析

5个核心技巧:掌握Gephi图可视化与网络分析 【免费下载链接】gephi Gephi - The Open Graph Viz Platform 项目地址: https://gitcode.com/gh_mirrors/ge/gephi 在当今数据驱动的时代,如何从复杂的网络关系中提取有价值的信息成为数据分析师和科研…

作者头像 李华
网站建设 2026/5/1 5:51:26

DSHidMini终极教程:让PS3手柄在Windows上重获新生

DSHidMini终极教程:让PS3手柄在Windows上重获新生 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini DSHidMini是一款专为索尼DualShock 3控制器设计…

作者头像 李华
网站建设 2026/5/3 17:03:03

终极指南:如何高效使用BilibiliDown实现B站视频批量下载

BilibiliDown是一款功能强大的跨平台B站视频下载工具,专为需要离线观看、批量保存B站内容的用户设计。本指南将全面解析该工具的核心功能、应用场景及优化技巧,帮助您充分发挥其潜力。 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频…

作者头像 李华
网站建设 2026/5/5 14:16:55

SWICD:Steam Deck Windows控制器驱动的终极完整指南

还在为Steam Deck在Windows系统下无法正常使用控制器而烦恼吗?SWICD(SteamDeck Windows Controller Driver)就是您苦苦寻找的解决方案!这款免费开源驱动程序能够将Steam Deck内置控制器完美映射为Windows系统识别的Xbox 360手柄&a…

作者头像 李华
网站建设 2026/5/1 2:12:31

GPT-SoVITS语音合成API接口开发实践

GPT-SoVITS语音合成API接口开发实践 在虚拟主播、智能客服、无障碍阅读等应用日益普及的今天,用户不再满足于“能说话”的机器语音,而是期待更自然、更具个性化的表达。传统语音合成系统虽然稳定,但往往需要数小时高质量语料和漫长的训练周期…

作者头像 李华