Electron FAQ
Warum habe ich Probleme bei der Installation von Electron?
Beim Ausführen von npm install electron
können bei einigen Nutzern gelegentlich Installationsfehler auftreten.
In fast allen Fällen sind diese Fehler das Ergebnis von Netzwerkproblemen und nicht von tatsächlichen Problemen mit dem Paket electron
npm. Fehler wie ELIFECYCLE
, EAI_AGAIN
, ECONNRESET
, and ETIMEDOUT
weisen alle auf ein Problem mit dem Netzwerk hin. Die beste Lösung ist es zu Versuchen die Netzwerkverbindung zu wechseln oder etwas zu warten und die Installation erneut zu versuchen.
Man kann auch versuchen, Electron direkt unter electron/electron/releases herunterzuladen, falls die Installation über npm
weiterhin fehlschlägt.
Wann wird Electron auf die neueste Version von Chrome aktualisiert?
Die Chrome Version von Electron wird in der Regel innerhalb von ein oder zwei Wochen Implementiert nachdem eine neue stabile Version für Chrome veröffentlicht wird. Diese Schätzung kann nicht garantiert werden und hängt vom Arbeitsaufwand während der Aktualisierung ab.
Nur der stabile Kanal von Chrome wird verwendet. Wenn ein wichtiger Fix im Beta- oder Dev-Kanal ist, werden wir ihn zurückportieren.
Weitere Informationen finden Sie in der Sicherheitseinführung.
Wann wird Electron auf die neueste Version von Node.js upgraden?
Wenn eine neue Version von Node.js veröffentlicht wird, warten wir in der Regel etwa einen Monat vor dem Upgrade in Elektron. So können wir vermeiden, die häufigen Bugs in neuen Node.js Versionen mit in Electron einzubinden.
Neue Funktionalitäten von Node.js werden in der Regel durch V8 Upgrades ermöglicht. Da Electron das vom Chrome Browser mitgelieferte V8 verwendet, stehen die neuen JavaScript Funktionalitäten der neuen Node.js Version in der Regel bereits in Electron zur Verfügung.
Wie kann man Daten zwischen Webseiten austauschen?
Um Daten zwischen Web-Seiten (Renderer-Prozesse) zu teilen, ist der einfachste Weg, HTML5-APIs zu verwenden, die bereits in Browsern zur Verfügung stehen. Gute Kandidaten sind Storage API, localStorage
, sessionStorage
und IndexedDB.
Alternativ können Sie auch die von Electron zur Verfügung gestellten IPC-Primitive verwenden. Um Daten zwischen den Haupt- und Renderer-Prozessen zu teilen, können Sie die ipcMain
und ipcRenderer
Module verwenden. Um direkt zwischen den Webseiten zu kommunizieren, können Sie eine MessagePort
von einem zur anderen senden möglicherweise über den Hauptprozess mit ipcRenderer.postMessage()
. Die anschließende Kommunikation über Message-Ports erfolgt direkt und führt nicht über den Hauptprozess.
Das Fenster/Icon meiner App verschwindet nach ein paar Minuten.
Dies geschieht, wenn die Variable die das Fenster speichert abgeräumt wird.
Wenn dieses Problem auftritt, könnten die folgenden Artikel hilfreich sein:
Wenn Sie eine schnelle Lösung bevorzugen, machen Sie die Variablen global, indem Sie Ihren Code
const { app, Tray } = require('electron')
app.whenReady().then(() => {
const tray = new Tray('/path/to/icon.png')
tray.setTitle('Hallo Welt')
})
wie folgt anpassen:
const { app, Tray } = require('electron')
let tray = null
app.whenReady().then(() => {
tray = new Tray('/path/to/icon.png')
tray.setTitle('Hallo Welt')
})
Ich kann jQuery/RequireJS/Meteor/AngularJS in Electron nicht verwenden.
Wegen der Node.js Integration in Electron gibt es einige zusätzlich eingefügte Symbole im DOM wie module
, exports
, require
. Das verursacht Probleme für einige Bibliotheken, da diese versuchen, Symbole mit den gleichen Namen einzufügen.
Um dies zu beheben können Sie die Node-Integration in Electron deaktivieren:
// Im Hauptprozess.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
win.show()
Wenn Sie sich jedoch die Möglichkeit, Node.js und Electron APIs zu nutzen, offen halten möchten, müssen Sie die Symbole auf der Seite umbenennen, bevor Sie andere Bibliotheken einbinden:
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
require('electron').xxx
is undefined.
Während Sie das in Electron integrierte Modul nutzen, könnten Sie auf einen Fehler wie diesen stoßen:
> require('electron').webFrame.setZoomFactor(1.0)
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
Es ist sehr wahrscheinlich, dass das Modul im falschen Prozess verwendet wird. Beispielsweise kann electron.app
nur im Hauptprozess verwendet werden, während electron.webFrame
nur im Renderer-Prozess verfügbar ist.
Die Schrift sieht verschwommen aus, was ist das und was kann ich tun?
Wenn sub-pixel anti-aliasing ausgeschaltet wurde kann die Schrift auf LCD-Bildschirmen unscharf werden. Beispiel:
Subpixel Antialiasing benötigt einen nicht-transparenten Hintergrund der Ebene, die die Schrift-Glyphen enthält. (Siehe dieses Problem für weitere Informationen).
Um dieses Ziel zu erreichen, setzen Sie den Hintergrund im Konstruktor für BrowserWindow:
const { BrowserWindow } = require('electron')
let win = new BrowserWindow({
backgroundColor: '#fff'
})
Der Effekt ist nur sichtbar auf (einige?) LCD-Bildschirme. Auch wenn Sie selbst keinen Unterschied sehen, könnten Ihre Nutzer dies eventuell sehr wohl. Am Besten definieren Sie den Hintergrund auf diese Weise, es sei denn Sie haben einen speziellen Grund dies nicht so zu tun.
Beachten Sie, dass nur die Einstellung des Hintergrunds in der CSS nicht den gewünschten Effekt hat.