Linux网络管理实战:从IP配置到故障排查
2026/10/19 7:08:56
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();});Electron 34.3.0 兼容性:
did-finish-load替代dom-ready,因为对于远程网站更可靠。远程网站处理:
executeJavaScript在页面加载后注入保护代码,因为直接的 CSS 注入可能被远程网站的 CSP 阻止。全面的复制防护:
CSP(内容安全策略):
executeJavaScript可能失败。网站自身的 JavaScript:
true参数表示捕获阶段)。用户绕过:
'https://example.com'。electron-builder打包或直接用electron .)。