CodeCabbie
CodeCabbie

Reputation: 3454

'onShow' event needed in Electron browser window

In Electron I want to trigger a javascript function in a browser window when that browser window is shown.

The code I have at the moment is as follows:

main.js (Main Process)

myWin = new BrowserWindow({ width: 1200, height: 400, show: false })

.... some time later and under certain circumstances ;-) ....

myWin.show()

usbUpload.js (Browser Window)

function validateFlights() {
   ...blar...
}

this.addEventListener('onshow', () => {
    validateFlights()
})

ValidateFlights() is the function in the browser window that I want to execute when the browser window is shown. Any ideas?

Upvotes: 0

Views: 3649

Answers (2)

pergy
pergy

Reputation: 5531

You can directly call javascript in the renderer process from main process using executeJavaScript. Combined with 'show' event of BrowserWindow you can do the following:

myWin.on('show', () => {
  myWin.webContents.executeJavaScript('validateFlights()')
})

Example:

main.js

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

app.once('ready', () => {
  let win = new BrowserWindow({show: false})
  win.once('show', () => {
    win.webContents.executeJavaScript('validateFlights()')
  })
  win.loadURL(path.resolve(__dirname, 'index.html'))
  win.show()
})

index.html

<html>
  <head>
    <script type="text/javascript">
      function validateFlights() {
        console.log('validated')
      }
    </script>
  </head>
  <body></body>
</html>

Upvotes: 1

unseen_damage
unseen_damage

Reputation: 1376

In your main process you probably want to do something with win.show() and the focus event if your window is already open in the background. Something like so:

let win = new BrowserWindow({width: 800, height: 600})
win.on('onFocus', () => {
  win.show()
})

Upvotes: 0

Related Questions