lxw124 / Interview

前端
2 stars 0 forks source link

electron如何实现关闭窗口前提醒 #58

Open lxw124 opened 4 years ago

lxw124 commented 4 years ago

首先渲染进程监听beforeunload事件,然后执行win.close()时会触发beforeunload事件,在这个事件上添加弹窗,判断用户选则是否关闭,如果是关闭则渲染进程向主进程发送信息,主进程调用app.exit()即可

//渲染进程
 <div @click="close" class="close">
        <i class="iconfont iconclose"></i>
      </div>
<script>
export default {
const {remote,ipcRenderer}=window.require('electron')
methods:{
  close(){
    remote.getCurrentWindow().close()
    }
     },
 mounted(){
    let win=remote.getCurrentWindow()
    this.isMaxSize=win.isMaximized()

    win.webContents.openDevTools()
   window.addEventListener('beforeunload',()=>{

     remote.dialog.showMessageBox({type:'info',title:'关闭页面',buttons:['否','是']}).then(index=>{
       console.log(index)
       if(index.response==1){
        ipcRenderer.send('closes',{close:true})
       }
     })
     })
}
}
</script>
//主进程
import { app, protocol, BrowserWindow ,ipcMain} from 'electron'
  ipcMain.on('closes',(event,param)=>{console.log(param)
  app.exit()
  })
lxw124 commented 4 years ago

还可以监听渲染进程的close事件,然后通过弹框判断往主进程发送信息

 win.on('close',(e)=>{e.preventDefault()
   remote.dialog.showMessageBox({type:'info',title:'关闭页面',buttons:['否','是']}).then(index=>{
     if(index.response==1){
       ipcRenderer.send('closes',{close:true})
     }
   })
  })