electron 如何为IPCmain.on添加事件侦听器?

dluptydi  于 11个月前  发布在  Electron
关注(0)|答案(1)|浏览(133)

我正在尝试为我的应用程序制作一个按钮,当你按下它时,会弹出一个“note card”。但是现在当我试图将“event”传入IPCmain的一个参数时,它说它已弃用。我该怎么办?
main.js

const {app, BrowserWindow, ipcMain} = require('electron'); 

let mainWindow

function createWindow() {
  mainWindow = new BrowserWindow({width: 800, height: 600})

  mainWindow.loadFile('index.html')
}

app.whenReady().then(createWindow); 

app.on('window-all-closed', ()=> {
  app.quit();
})

app.on('activate', () => {
  if(BrowserWindow.getAllWindows().length === 0){
    createWindow(); 
  }
}); 

ipcMain.on('createNote', () => {
  const noteText = 'New Note'; 
  mainWindow.webContents.send('noteCreated', noteText);
});

字符串
create.js

const { ipcRenderer } = require('electron'); 

document.getElementById('createButton').addEventListener('click', ()=>{
  ipcRenderer.send('createNote'); 
}); 

ipcRenderer.on('noteCreated', (noteText) => {
  const noteContainer = document.getElementById('noteContainer'); 
  const noteCard = document.createElement('div'); 
  noteCard.textContent = noteText; 
  noteContainer.appendChild(noteCard); 
});


index.html

<!DOCTYPE html>
<html lang="en">
  <head> 
    <meta charset = "UTF-8"> 
    <meta name = "viewport" content="width=device-width, initial-scale=1.0">
    <script src="create.js"> </script>
    <title> ToDo </title>
  </head>

  <body>
    <div id="Header">
      <h1> Header </h1>
      <button id="createButton"> Create </button>
    </div>
    <div id="noteContainer"></div>
  </body>
</html>


我尝试将变量“WARNNote”从WARN.js传递到参数中,但这不起作用。

t40tm48m

t40tm48m1#

当得到一个错误时,最好检查所有相关的documentation。在那里,我们可以看到渲染器进程中noteCreated事件的侦听器应该有一个非常不同的签名。
事实上,文档中列出了Electron将传递给listener函数的两个参数,即event,其类型为IpcRendererEvent,以及...args,其类型为any[]。圆点告诉你,你可以在args的位置期待多个参数,参见MDN
args将是您传递给webContents.send()的任何内容。因此,您应该修改侦听器函数,

ipcRenderer.on('noteCreated', (event, noteText) => {
  const noteContainer = document.getElementById('noteContainer'); 
  const noteCard = document.createElement('div'); 
  noteCard.textContent = noteText; 
  noteContainer.appendChild(noteCard); 
});

字符串
参数的命名无关紧要,只有它们的顺序和位置重要:第一个参数总是IpcRendererEvent(它允许您直接与消息的发送者通信),后面是您提供的任何参数。

相关问题