2017-07-18 50 views
0

In Electron我想在顯示瀏覽器窗口時在瀏覽器窗口中觸發JavaScript函數。電子瀏覽器窗口中需要'onShow'事件

我現在共有的代碼如下:

main.js(主處理)

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

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

myWin.show() 

usbUpload.js(瀏覽器窗口)

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

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

ValidateFlights()是我想在瀏覽器時執行的瀏覽器窗口中的功能窗口顯示。 任何想法?

回答

1

您可以直接從主進程使用executeJavaScript在渲染過程中調用JavaScript。

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

實例:用'show'事件的BrowserWindow你可以做以下的組合式

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> 
+0

這似乎很接近!我已經嘗試過了,但是在控制檯窗口中出現''Uncaught ReferenceError:validateFlights is not defined'''。 'validateFlights()'似乎不在executeJavaScript的範圍內。如果我做了一個簡單的'console.log()',它完全按照需要工作,但我必須調用'validateFlights()'。任何想法非常感謝。 – CodeCabbie

+0

然後添加一個工作示例;) – pergy

+0

它也適用於''。如果您仍然有問題,請分享您的代碼 – pergy

0

在您的主流程中,如果您的窗口已在後臺打開,您可能需要使用win.show()focus event。像這樣:

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

我不太明白這是如何幫助的。我已經在主進程中調用'myWin.show()'來響應來自系統托盤的事件。這工作正常,並顯示窗口。問題是我需要在瀏覽器窗口中添加一個'onShow'處理程序,以響應顯示的窗口。然後我可以在瀏覽器窗口中調用一個本地函數。 – CodeCabbie

+0

我只能通過我的解釋你的話。基於上述情況,您正在打開一個窗口,但它隱藏在後臺。你想通過點擊一個菜單按鈕將它帶到前臺。基本上,聚焦事件意味着窗口正被帶到前臺使用,然後您就可以開始工作。如果你有更多的代碼,它可能會更有意義 –

+0

嗨@unseen_damage - 我已經澄清了這個問題,只關注需要的東西,並添加一些更多的代碼。這些幫助有用? – CodeCabbie

相關問題