Zum Hauptteil springen

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 Einführung zur Sicherheit.

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. Good candidates are Storage API, localStorage, sessionStorage, and 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 Module ipcMain und ipcRenderer verwenden. To communicate directly between web pages, you can send a MessagePort from one to the other, possibly via the main process using 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 rendering example

Subpixel Antialiasing benötigt einen nicht-transparenten Hintergrund der Ebene, die die Schrift-Glyphen enthält. (Siehe dieses Problem für weitere Informationen).

To achieve this goal, set the background in the constructor for 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.