type:'separator'},{label:'Exit',click:function(){mainWindow.webContents.send('action','exit')}}]},{label:'Edit',子菜单:[{标签:'返回',加速器:'CmdOrCtrl+Z',角色:'撤消'},{标签:'重做',加速器:'CmdOrCtrl+Y',角色:'重做'},{类型:'分隔符'},//分隔符{label:'cut',accelerator:'CmdOrCtrl+X',role:'cut'},{label:'copy',accelerator:'CmdOrCtrl+C',role:'copy'},{label:'Paste',accelerator:'CmdOrCtrl+V',role:'paste'},{label:'Delete',accelerator:'CmdOrCtrl+D',role:'delete'},{type:'分隔符'},//分隔符{label:'SelectAll',accelerator:'CmdOrCtrl+A',role:'selectall'}]},{label:'Help',submenu:[{label:'About...',click:async()=>{const{shell}=require('electron');等待外壳。openExternal('https://segmentfault.com/u/shaomeng');ivate',function(){if(mainWindow===null)createWindow();});//接收退出命令ipcMain.on('exit',function(){safeExit=true;app.quit();});渲染过程代码renderer.jsconstipcRenderer=require('electron').ipcRenderer;//电子通信模块constremote=require('electron').remote;//electron主进程和渲染进程通信模块constMenu=remote.Menu;//electron渲染器进程的菜单模块constdialog=remote.dialog;//Electron对话框模块//初始化基本参数letisSave=true;//初始状态不需要保存lettxtEditor=document.getElementById('txtEditor');//获取文本框对象letcurrentFile=null;//初始状态没有文件路径letisQuit=true;//初始状态可以正常退出//右键菜单模板constcontextMenuTemplate=[{label:'Return',accelerator:'CmdOrCtrl+Z',role:'undo'},{label:'Redo',accelerator:'CmdOrCtrl+Y',role:'redo'},{type:'separator'},//分隔符{label:'cut',accelerator:'CmdOrCtrl+X',role:'cut'},{label:'copy',加速器:'CmdOrCtrl+C',作用:'复制'},{标签:'粘贴',加速器:'CmdOrCtrl+V',作用:'粘贴'},{标签:'删除休息;case'exit'://退出askSaveNeed();if(isQuit){//正常退出ipcRenderer.sendSync('exit');}isQuit=true;//重置退出正常break;}});//初始化文档函数initDoc(){currentFile=null;txtEditor.value='';document.title='记事本-无标题';是保存=真;document.getElementById("txtNum").innerHTML=0;}//询问是否保存命令functionaskSaveNeed(){//检测是否需要执行保存命令if(isSave){return;}//弹窗类型为messageconstoptions={type:'question',message:'是否保存当前文档?',buttons:['Yes','No','Cancel']}//处理弹出操作的结果constselection=dialog.showMessageBoxSync(remote.getCurrentWindow(),options);//按钮yes和nocancel是[0,1,2]if(selection==0){saveCurrentDoc();}elseif(selection==1){console.log('取消并退出!');}else{//点击取消或关闭弹窗禁止退出操作console.log('C取消并坚持下去!');退出=假;//防止执行退出}}//保存文档,判断是新文档还是旧文档functionsaveCurrentDoc(){//新文档会执行弹出保存操作if(!currentFile){constoptions={title:'Save',filters:[{name:'TextFiles',extensions:['txt','js','html','md']},{name:'AllFiles',extensions:['*']}]}constpaths=dialog.showSaveDialogSync(remote.getCurrentWindow(),options);如果(路径){当前文件=路径;}}//直接保存旧文档if(currentFile){consttxtSave=txtEditor.value;保存文本(当前文件,txtSave);是保存=真;document.title="记事本-"+currentFile;}}//选择文档路径functionopenFile(){//弹出窗口类型为openFileconstoptions={filters:[{name:'TextFiles',extensions:['txt','js','html','md']},{名称:'所有文件',扩展名:['*']}],p){控制台.日志(e);}//刷新当前字数统计值到页面document.getElementById("txtNum").innerHTML=sLen;}//拖拽读取文档constdragContent=document.querySelector('#txtEditor');//防止电子默认事件dragContent.ondraenter=dragContent.ondragover=dragContent.ondragleave=function(){returnfalse;}//拖动事件执行dragContent.ondrop=function(e){e.preventDefault();//阻止默认事件currentFile=e.dataTransfer.files[0].path;//获取文档路径consttxtRead=readText(currentFile);txtEditor.value=txtRead;document.title='记事本-'+currentFile;是保存=真;wordsCount();}主页代码index.html
