在Electron中创建多个应用实例

时间:2016-11-06 19:03:07

标签: javascript github cross-browser cross-platform electron

我到处搜索,但我无法找到如何创建我的电子应用的多个实例。我正在尝试创建一个便利贴应用,其中有一个加号窗口,可以创建一个新的粘滞便笺,而后者又会有相同的加号按钮。

enter image description here

我试过这个但是第一次点击粘滞便笺上的按钮有一个很大的问题是创建了一个新实例,但第二次点击加按钮2时创建了新实例,第三次点击加按钮4新实例已创建

  

在main.js文件中

let mainWindow

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 190, height: 190,frame:false,transparent:true})

  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }))
  mainWindow.on('closed', function () {
    mainWindow = null
  })
  //when plus button is clicked it is firing a message 'create-new-instance' through ipcRenderer
  ipcMain.on('create-new-instance',()=>{
    console.log('create new window');
    createWindow();
  })
}

//this is called when for the first time the app is launched
app.on('ready', createWindow)
  

在加号按钮所在的renderer.js文件中

document.getElementById('plusButton').addEventListener("click", ()=>{
    var {ipcRenderer} = require('electron')
    ipcRenderer.send('create-new-instance')
})

问题是我第一次点击加按钮'创建新实例'由于只有一个音符实例(在您第一次启动应用程序时创建),因此会创建一个新音符,使其成为2个音符实例,并且能够聆听创建新实例'事件,当我第二次点击加按钮时,两个音符都会听这个事件并创建1个音符,每个音符共有4个音符。

请帮助我或建议我使用其他任何替代方法:)

1 个答案:

答案 0 :(得分:1)

这里的主要问题是你要为create-new-instance内的createWindow()事件添加一个监听器,所以每次createWindow()运行它都会添加另一个事件监听器,并且{{1}每个侦听器都会发出一个新窗口。为避免这种情况,您需要在create-new-instance之外移动事件订阅,以便无论调用createWindow()多少次,都只有一个事件的监听器。