Aller au contenu principal

FAQ Electron

Pourquoi ai-je des difficultés à installer Electron ?

Certains utilisateurs rencontrent parfois des erreurs d'installation lors de l'exécution de npm install electron.

Dans la plupart des cas, ces erreurs sont le résultat d'un problème de réseau et non un soucis avec le package npm electron. Les erreurs comme ELIFECYCLE, EAI_AGAIN, ECONNRESET et ETIMEDOUT sont toutes des indications d'un problème de réseau. La meilleure solution est d'essayer de changer de réseau ou juste d'attendre un peu et de réessayer l'installation.

Vous pouvez également essayer de télécharger Electron directement depuis electron/electron/releases si l'installation via npm ne marche pas.

Quand est-ce qu'Electron s'aligne sur la dernière mise à jour de Chrome ?

La version Chrome d'Electron est généralement mise à jour après une à deux semaines suivant la disponibilité d'une nouvelle mise à jour stable de Chrome. Cette estimation n'est pas garantie et dépend du volume de travail impliqué dans la mise à niveau.

Seul le canal stable de Chrome est utilisé. Si un correctif important est en version bêta ou en canal, nous le porterons à posteriori.

Pour plus d’informations, veuillez consulter l’introduction à la sécurité .

Quand est-ce qu'Electron s'aligne sur la dernière mise à jour de Node.js?

Nous attendons généralement environ un mois après la publication d’une nouvelle version de Node.js pour mettre à niveau celle d’Electron. Nous évitons ainsi d'être affectés par des bugs introduits dans les nouvelles versions de Node.js, ce qui arrive très souvent.

Les nouvelles fonctionnalités de Node.js sont généralement apportées par des mises à niveau de V8 et comme Electron utilise le V8 livré avec le navigateur Chrome, toute nouvelle fonctionnalité JavaScript brillante d’une nouvelle version de Node.js est normalement déjà dans Electron.

Comment partager des données entre des pages web ?

Pour partager des données entre des pages web (les processus de rendu), le moyen le plus simple est d'utiliser les APIs HTML5 qui sont déjà disponibles dans les navigateurs. Les bons candidats sont API Storage, localStorage, sessionStorage et IndexedDB.

Vous pouvez également utiliser les primitives IPC fournies par Electron. Pour partager des données entre le processus principal et le moteur de rendu, vous pouvez utiliser les modules ipcMain et ipcRenderer. Pour communiquer directement entre des pages web, vous pouvez envoyer un MessagePort d'une page à l'autre, éventuellement via le processus principal en utilisant ipcRenderer.postMessage(). La communication ultérieure sur les ports de message est directe et ne fait pas de détour par le processus principal.

La fenêtre/icône de mon application a disparu au bout de quelques minutes.

Cela se produit lorsque la variable qui sert à stocker la fenêtre/icône est détruite par le ramasse-miettes.

Si vous rencontrez ce problème, les articles suivants peuvent s'avérer utiles :

Si vous voulez une solution rapide, vous pouvez mettre les variables en globale en modifiant votre code de la façon suivante :

const { app, Tray } = require('electron')
app.whenReady().then(() => {
const tray = new Tray('/path/to/icon.png')
tray.setTitle('hello world')
})

devient:

const { app, Tray } = require('electron')
let tray = null
app.whenReady().then(() => {
tray = new Tray('/path/to/icon.png')
tray.setTitle('hello world')
})

Je ne peux pas utiliser jQuery/RequireJS/Meteor/AngularJS avec Electron.

En raison de l'intégration de Node.js dans Electron, il y a quelques symboles supplémentaires insérés dans le DOM comme module, exports, require. Cela pose des problèmes pour certaines bibliothèques, puisqu'ils veulent insérer des symboles avec les mêmes noms.

Pour résoudre ce problème, vous pouvez désactiver l'intégration de node dans Electron :

// Dans le processus main.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
win.show()

Mais si vous voulez garder la possibilité d'utiliser Node.js et l'API Electron, vous devez renommer les symboles dans la page avant d’inclure d'autres bibliothèques :

<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.

Lorsque vous utilisez le module intégré d'Electron, vous pouvez obtenir une erreur comme celle-ci :

> require('electron').webFrame.setZoomFactor(1.0)
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined

Il est très probable que vous utilisez le module dans le mauvais processus. Par exemple electron.app peut seulement être utilisé dans le processus principal, tandis que electron.webFrame n'est disponible que dans les processus de rendu.

La police semble floue, qu'est-ce et à que puis-je faire?

Si sub-pixel anti-aliasing est désactivé sur les écrans LCD les polices peuvent être floues. Exemple . Exemple :

exemple de rendu de sous-pixel

L'anticrénelage des sous-pixels nécessite un fond non transparent pour la fenêtre contenant les glyphes d'une police d'écriture. (Voir cette issue pour plus d'infos).

Pour atteindre cet objectif, définissez la couleur de fond dans le constructeur du BrowserWindow :

const { BrowserWindow } = require('electron')
const win = new BrowserWindow({
backgroundColor: '#fff'
})

L'effet n'est visible que sur (certains?) Écrans LCD. Même si vous ne voyez pas de différence, certains de vos utilisateurs le peuvent. Il est préférable de toujours définir l’arrière-plan de cette façon, sauf si vous avez des raisons de ne pas le faire.

Veuillez noter que simplement paramétrer la couleur de fond avec le CSS ne donnera pas l'effet souhaité.