2017-06-15 6 views
0

Ich muss auf Renderer-Skripte vom Elektronen-Hauptmenü aus über onclick zugreifen. Ich habe folgendes auf das Elektron Hauptmenü hinzugefügt:Zugriff auf Renderer-Skripte aus dem Elektronen-Hauptmenü

{ 
     label: 'Checking for Update', 
     click: function() { 
      require('./update') 
     } 
} 

......................... 

{ 
     label: `Preferences...`, 
     click: function() { 
      require('./preferences') 
     } 
} 

Ich versuche preferences.js oder update.js oben zu nennen. Beide Skripte funktionieren einwandfrei, wenn Sie direkt von index.html oder vom App-Fenster über onclick, aber nicht aus dem App-Menü anrufen. Wenn in Hauptanwendungsmenü geklickt seine erroring nur mit

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 sieht wie folgt aus:

const appname = electron.remote.app.getName() 

Es gibt keine Fernbedienung im Hauptmenü Prozess. Remote-Modul gehört nur zum Renderer, so scheint dies ein angemessener Fehler für mich zu sein.

Aber ich bin nicht ganz sicher, wie man das leicht beheben kann und Skripts funktionieren, sobald sie aus dem App-Menü aufgerufen werden.

Antwort

0

So etwas wie dies funktionieren könnte:

const {app} = (process.type === 'renderer' ? require('electron').remote : require('electron')) 

denke ich, dass helfen soll Ihren Code Haupt- und Renderer sicher zu machen. Natürlich müssen Sie den Rest Ihres Codes entsprechend ändern. const appname = electron.remote.app.getName() würde nur const appname = app.getName()

+0

Ja, ich etwas Ähnliches umgesetzt. Ich werde meine Prüflogik durch "process.type" ersetzen, da es viel sauberer ist. Vielen Dank! Als akzeptiert markiert. –

+0

'const {app, dialog} = erfordern ('electron'). Remote || require ('electron') 'würde dann auch funktionieren. – RoyalBingBong

+0

kurz und gut! –

0

ich in der Lage war, es wie folgt zu umgehen:

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() 
} 
Verwandte Themen