Open dlrandy opened 6 years ago
MAIN process <---IPC-->renderer proess 同步的IPC let reply = ipcRenderer.sendSync(channel, args) pcMain.on(channel, (event, args) => { event.returnValue='sfsdfsdfdsf' })
异步的IPC let ipc.send(channel, args) ipc.on('async-reply', (event, args) => { })
ipcMain.on(channel, (event, args) => { event.sender.send('async-reply', args) })
ipcMain.removeListener(chanel, function)
ipcRenderer.removeListener(chanel, function)
ipc.removeAllListeners(chanel)
ipc.once
Dialog
dialog.showOpenDialog(mainWindow, { properties: ['openDirectory'] title: '', defautPath: '', filters: [ {name: 'images', extensions:[]} ] }, function(files){
})
dialog.showMessageBox({ buttons: [], defaultId:, message:, detail:, icon:electron.nativeImage.createfromPath() }, function(index){
})
dialog.showErrorBox(title, mesasge)
webContents是BrowserWindow的属性
webContents有events和methods:capture event,Manage windows,capture Window to image、pdf,screens Module和locale
electron.webContents.getAllWebContents()需要在createWindow之后调用才不是空的数组
创建Window要在app ready之后
去掉html的title在browserWindow的options里使用title可以实现动态的title
did-start-loading event发生在window开始加载(loadURL)的时候,可能会在MAin process里需要一些activity的时候使用
did-start-loading dom-ready did-finish-load did-stop-loading
需要使用setTimeout browserWindow.webContents.capturePage({ x:, y:, width: browserWindow.getBounds().width, height: browserWindow.getBounds().height }, function(image){ let desktop = app.getPath('desktop); fs.writeFile(path, image.toPNG()) })
browserWindow.webContents.printToPDF({}, function(data){
})
想设置窗口出现在屏幕的位置的时候,可能要用到screen模块
electron.screen.getAllDisplays()/getPrimaryDisplay()
app.getLocale()
did
Menu 是 只能直接用于主线程的
Electron 赋予了对application menu 和 contextual menu的 完全控制
menu一般需要使用Menu 和MenuItem来实现 application 级别的创建: let template = [ { label: 'xxooxo', role: '', key: '' enabled: , accelerator: '', click, type: 'menu/separator/(checkbox|checked)/(radio|checked)' submneu: [ { } ] } ] const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu)
MAC的Menu 是系统级的,它的第一个app Menu应该是app的 name,这个是特殊的menu没有这个的话会有第一个menu不正常显示的问题 不想要默认的role可以 使用click(menuitem, browserWindow, event)进行自定义
main process 和renderer process之间的交互需要使用:remote或者IPC remote可以理解为在renderer进程里有一个main process的中介。 ipc则是观察者了;
对于contextMenu可以使用popup(win)的方法进行弹出
ipc里拿到发送窗口的方法: 1、BrowserWindow.fromWebContents(event.sender)// 2、BrowserWindow.fromId(event.sender.webContents.id)//优先使用这个方法