我需要通过onclick从电子主菜单访问渲染器脚本。我已将以下内容添加到电子主菜单中:
{
label: 'Checking for Update',
click: function () {
require('./update')
}
}
.........................
{
label: `Preferences...`,
click: function () {
require('./preferences')
}
}
我尝试拨打上面的preferences.js
或update.js
。从index.html
直接调用,或通过onclick从应用程序窗口调用时,两个脚本都运行正常,但不是从应用程序菜单调用。在主应用程序菜单中单击时,它只是错误
Uncaught Exception:
TypeError: Cannot read property 'app' of undefined
at IncomingMessage.res.on (update.js:20:36)
at emitOne (events.js:96:13)
at IncomingMessage.emit (events.js:188:7)
at IncomingMessage.Readable.read (_stream_readable.js:381:10)
at flow (_stream_readable.js:761:34)
at resume_ (_stream_readable.js:743:3)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
update.js:20如下所示:
const appname = electron.remote.app.getName()
主菜单过程中没有遥控器。远程模块只属于渲染器,所以这对我来说似乎是合理的错误。
但是我不太确定如何轻松解决这个问题,并且一旦从应用菜单调用脚本就可以使脚本正常工作。
答案 0 :(得分:0)
这样的事情可行:
const {app} = (process.type === 'renderer' ? require('electron').remote : require('electron'))
我认为这应该有助于使您的代码成为主要和渲染器证明。当然,您必须相应地更改其余代码。 const appname = electron.remote.app.getName()
只会成为const appname = app.getName()
答案 1 :(得分:0)
我能够解决它如下:
const electron = require('electron')
const remote = electron.remote
if (remote) { // remote will be 'undefined' when calling from the main process
const app = remote.app
const dialog = remote.dialog
const window = remote.getCurrentWindow()
} else {
const app = electron.app
const dialog = electron.dialog
const window = electron.getCurrentWindow()
}