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.

For more information, please see the security introduction.

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 différentes pages web ( processus de rendu), le moyen le plus simple est d'utiliser les APIs d'HTML5 déjà disponibles dans les navigateurs. Les bons candidats pour cela sont: parmi les Storage API, localStorage: sessionStorage ainsi que IndexedDB.

Vous pouvez également utiliser les primitives IPC fournies par Electron. To share data between the main and renderer processes, you can use the ipcMain and ipcRenderer modules. To communicate directly between web pages, you can send a MessagePort from one to the other, possibly via the main process using ipcRenderer.postMessage(). Les communications ultérieures par les MessagePort seront directes et ne feront pas intervenir le processus principal.

L'icône de mon application a disparu de la barre des tâches 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 qui veulent insérer des symboles ayant 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()

Cependant si vous désirez conserver 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 ne peut être utilisé que dans le processus principal, tandis que electron.webFrame n'est disponible que dans les processus de rendu.

La police semble floue, 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).

To achieve this goal, set the background in the constructor for 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 le simple paramétrage de la couleur de fond avec le CSS ne donnera pas l'effet souhaité.