No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Electron: How to listen to events on the ipcRenderer?

    Help
    2
    6
    2070
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stuartcusack last edited by

      I’ve managed to send events out from electron using:

      mainWindow.webContents.send("event-name", value);
      

      And I can successfully receive the event like so:

      this.$q.electron.ipcRenderer.on('event-name', {
        // whatever
      });
      

      But how do I do this in reverse? i.e. send from the vue component to electron. This doesn’t seem to work:

      this.$q.electron.ipcRenderer.send('event-name', {
      	value: value
      });
      
      mainWindow.webContents.on('event-name', (event, info) => {
          console.log('event received')
      });
      
      1 Reply Last reply Reply Quote 1
      • R
        rick.luan last edited by

        This work for me

        import { app, BrowserWindow, ipcMain } from ‘electron’
        ipcMain.on(‘event-name’, (event, value) => {
        mainWindow.webContents.send(‘event-name’, value)
        })

        1 Reply Last reply Reply Quote 1
        • S
          stuartcusack last edited by

          @rick-luan THANK YOU!

          That works perfectly. You saved some hairs on my head.

          1 Reply Last reply Reply Quote 0
          • S
            stuartcusack last edited by stuartcusack

            By the way, this might be useful for you if you ever need to pass multiple values from ipcRenderer to ipcMain.

            /* in component (pass as many args as you like) */
            ipcRenderer.send('savePassword', 'MyService', username, password);
            
            /* in electron-main.js (define the args you want using JS rest operator and deconstruction) */
            ipcMain.on('savePassword', (event, ...[service, account, secret]) => {
                    // keytar is a nice package for secure storage of credentials on Electron
            	keytar.setPassword(service, account, secret);
            })
            
            1 Reply Last reply Reply Quote 0
            • S
              stuartcusack last edited by stuartcusack

              And here’s a way to receive a response / get a variable from ipcRenderer:

              /* in component - use sendSync when a response is needed */
              let password ipcRenderer.sendSync('getPassword', 'MyService', username);
              
              /* in electron-main.js */
              ipcMain.on('getPassword', (event, ...[service, account]) => {
              	var passwordPromise = keytar.getPassword(service, account);
              
              	// Every function in keytar is asynchronous and returns a promise
              	passwordPromise.then((result) => {
                              // This is how we return data to ipcRenderer
              		event.returnValue = result
              	})
              })
              
              1 Reply Last reply Reply Quote 0
              • S
                stuartcusack last edited by

                @rick-luan I wonder if you can help me with this:
                https://forum.quasar-framework.org/topic/3915/ipcrenderer-and-platform-detection-in-boot-files

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post