Aller au contenu principal

BrowserView window.open() Correctif de vulnérabilité

· Une min de lecture

Une vulnérabilité de code a été découverte qui permettait à Node d'être réactivé dans les fenêtres enfants.


L'ouverture d'un BrowserView avec sandbox: true ou nativeWindowOpen: true et nodeIntegration: false donne un contenu Web où window.open peut être appelé et la fenêtre enfant nouvellement ouverte aura nodeIntegration activé. Cette vulnérabilité affecte toutes les versions prises en charge d'Electron.

Atténuation

Nous avons publié de nouvelles versions d'Electron qui incluent des corrections pour cette vulnérabilité : 2.0.17, 3.0.15, 3.1.3, 4.0.4, et 5.0.0-beta.2. Nous encourageons tous les développeurs d'Electron à mettre à jour leurs applications vers la dernière version stable immédiatement.

Si pour une raison quelconque, vous ne pouvez pas mettre à jour votre version d'Electron, vous pouvez atténuer ce problème en désactivant tous les contenus web enfants :

view.webContents.on('-add-new-contents', (e) => e.preventDefault());

Informations complémentaires 

Cette vulnérabilité a été trouvée et signalée de manière responsable au projet Electron par PalmerAL.

Pour en savoir plus sur les meilleures pratiques pour sécuriser vos applications Electron, consultez notre tutoriel de sécurité.

Si vous souhaitez signaler une vulnérabilité dans Electron, envoyez un e-mail à security@electronjs.org.

Node.js Native Addons and Electron 5.0

· 2 mins de lecture

If you're having trouble using a native Node.js addon with Electron 5.0, there's a chance it needs to be updated to work with the most recent version of V8.


Goodbye v8::Handle, Hello v8::Local

In 2014, the V8 team deprecated v8::Handle in favor of v8::Local for local handles. Electron 5.0 includes a version of V8 that has finally removed v8::Handle for good, and native Node.js addons that still use it will need to be updated before they can be used with Electron 5.0.

The required code change is minimal, but every native Node module that still uses v8::Handle will fail to build with Electron 5.0 and will need to be modified. The good news is that Node.js v12 will also include this V8 change, so any modules that use v8::Handle will need to be updated anyway to work with the upcoming version of Node.

I maintain a native addon, how can I help?

If you maintain a native addon for Node.js, ensure you replace all occurrences of v8::Handle with v8::Local. The former was just an alias of the latter, so no other changes need to be made to address this specific issue.

You may also be interested in looking into N-API, which is maintained separately from V8 as a part of Node.js itself, and aims to insulate native addons from changes in the underlying JavaScript engine. You can find more information in the N-API documentation on the Node.js website.

Help! I use a native addon in my app and it won't work!

If you're consuming a native addon for Node.js in your app and the native addon will not build because of this issue, check with the author of the addon to see if they've released a new version that fixes the problem. If not, reaching out to the author (or opening a Pull Request!) is probably your best bet.

Electron v5.0.0 Timeline

· 2 mins de lecture

Pour la première fois, Electron est heureux de publier notre calendrier de publication à partir de la version 5. Il s’agit de notre première étape pour avoir une échéancière publique à long terme.


As mentioned in our v4.0.0 stable release blog post, we are planning to release approximately quarterly to maintain closer cadence with Chromium releases. Chromium releases a new version very quickly -- every 6 weeks.

Take a look at progression in Electron versus Chromium side-by-side:

line graph comparing Electron versus Chromium versions

In the last half of 2018, our top priority was releasing faster and catching up closer to Chromium. We succeeded by sticking to a predetermined timeline. Electron 3.0.0 and 4.0.0 were released in a 2-3 month timeline for each release. We are optimistic about continuing that pace in releasing 5.0.0 and beyond. With a major Electron release approximately every quarter, we're now keeping pace with Chromium's release cadence. Getting ahead of Chromium stable release is always a goal for us and we are taking steps towards that.

We would love to promise future dates like Node.js and Chromium do, but we are not at that place yet. We are optimistic that we will reach a long-term timeline in the future.

Dans cet esprit, nous prenons les premières mesures en publiant notre calendrier de publication pour la version 5.0.0. Vous pouvez trouver cela ici.

To help us with testing our beta releases and stabilization, please consider joining our App Feedback Program.

Electron 4.0.0

· 7 mins de lecture

The Electron team is excited to announce that the stable release of Electron 4 is now available! You can install it from electronjs.org or from npm via npm install electron@latest. The release is packed with upgrades, fixes, and new features, and we can't wait to see what you build with them. Read more for details about this release, and please share any feedback you have as you explore!


Quoi de neuf ?

A large part of Electron's functionality is provided by Chromium, Node.js, and V8, the core components that make up Electron. As such, a key goal for the Electron team is to keep up with changes to these projects as much as possible, providing developers who build Electron apps access to new web and JavaScript features. To this end, Electron 4 features major version bumps to each of these components; Electron v4.0.0 includes Chromium 69.0.3497.106, Node 10.11.0, and V8 6.9.427.24.

In addition, Electron 4 includes changes to Electron-specific APIs. You can find a summary of the major changes in Electron 4 below; for the full list of changes, check out the Electron v4.0.0 release notes.

Disabling the remote Module

You now have the ability to disable the remote module for security reasons. The module can be disabled for BrowserWindows and for webview tags:

// BrowserWindow
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})

// webview tag
<webview src="http://www.google.com/" enableremotemodule="false"></webview>

See the BrowserWindow and <webview> Tag documentation for more information.

Filtering remote.require() / remote.getGlobal() Requests

This feature is useful if you don't want to completely disable the remote module in your renderer process or webview but would like additional control over which modules can be required via remote.require.

When a module is required via remote.require in a renderer process, a remote-require event is raised on the app module. You can call event.preventDefault() on the the event (the first argument) to prevent the module from being loaded. The WebContents instance where the require occurred is passed as the second argument, and the name of the module is passed as the third argument. The same event is also emitted on the WebContents instance, but in this case the only arguments are the event and the module name. In both cases, you can return a custom value by setting the value of event.returnValue.

// Control `remote.require` from all WebContents:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// Control `remote.require` from a specific WebContents instance:
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
}
);

In a similar fashion, when remote.getGlobal(name) is called, a remote-get-global event is raised. This works the same way as the remote-require event: call preventDefault() to prevent the global from being returned, and set event.returnValue to return a custom value.

// Control `remote.getGlobal` from all WebContents:
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
// ...
}
);

// Control `remote.getGlobal` from a specific WebContents instance:
browserWin.webContents.on(
'remote-get-global',
function (event, requestedGlobalName) {
// ...
}
);

Pour plus d'informations, consultez la documentation suivante :

JavaScript Access to the About Panel

On macOS, you can now call app.showAboutPanel() to programmatically show the About panel, just like clicking the menu item created via {role: 'about'}. See the showAboutPanel documentation for more information

Controlling WebContents Background Throttling

WebContents instances now have a method setBackgroundThrottling(allowed) to enable or disable throttling of timers and animations when the page is backgrounded.

let win = new BrowserWindow(...)
win.webContents.setBackgroundThrottling(enableBackgroundThrottling)

See the setBackgroundThrottling documentation for more information.

Changements majeurs avec rupture de compatibilité

No More macOS 10.9 Support

Chromium no longer supports macOS 10.9 (OS X Mavericks), and as a result Electron 4.0 and beyond does not support it either.

Single Instance Locking

Previously, to make your app a Single Instance Application (ensuring that only one instance of your app is running at any given time), you could use the app.makeSingleInstance() method. Starting in Electron 4.0, you must use app.requestSingleInstanceLock() instead. The return value of this method indicates whether or not this instance of your application successfully obtained the lock. If it failed to obtain the lock, you can assume that another instance of your application is already running with the lock and exit immediately.

For an example of using requestSingleInstanceLock() and information on nuanced behavior on various platforms, see the documentation for app.requestSingleInstanceLock() and related methods and the second-instance event.

win_delay_load_hook

When building native modules for windows, the win_delay_load_hook variable in the module's binding.gyp must be true (which is the default). If this hook is not present, then the native module will fail to load on Windows, with an error message like Cannot find module. See the native module guide for more information.

Deprecations

The following breaking changes are planned for Electron 5.0, and thus are deprecated in Electron 4.0.

Node.js Integration Disabled for nativeWindowOpen-ed Windows

Starting in Electron 5.0, child windows opened with the nativeWindowOpen option will always have Node.js integration disabled.

webPreferences Default Values

When creating a new BrowserWindow with the webPreferences option set, the following webPreferences option defaults are deprecated in favor of new defaults listed below:

PropertyDeprecated DefaultNew Default
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagvalue of nodeIntegration if set, otherwise truefalse

Please note: there is currently a known bug (#9736) that prevents the webview tag from working if contextIsolation is on. Keep an eye on the GitHub issue for up-to-date information!

Learn more about context isolation, Node integration, and the webview tag in the Electron security document.

Electron 4.0 will still use the current defaults, but if you don't pass an explicit value for them, you'll see a deprecation warning. To prepare your app for Electron 5.0, use explicit values for these options. See the BrowserWindow docs for details on each of these options.

webContents.findInPage(text[, options])

The medialCapitalAsWordStart and wordStart options have been deprecated as they have been removed upstream.

Programme de feedback

The App Feedback Program we instituted during the development of Electron 3.0 was successful, so we've continued it during the development of 4.0 as well. We'd like to extend a massive thank you to Atlassian, Discord, MS Teams, OpenFin, Slack, Symphony, WhatsApp, and the other program members for their involvement during the 4.0 beta cycle. To learn more about the App Feedback Program and to participate in future betas, check out our blog post about the program.

Et maintenant ?

À court terme, vous pouvez compter sur l’équipe pour continuer a se concentrer sur le développement des principaux composants qui composent Electron, notamment Chromium, Node et V8. Bien que nous veillions à ne pas faire de promesses à propos des dates de publication, notre plan est la sortie de nouvelles versions majeures d'Electron avec de nouvelles versions de ces composants environ un trimestre. Consultez notre document de gestion des versions pour plus d’informations sur le contrôle de version dans Electron.

Pour des informations sur les changements de rupture prévus dans les versions à venir d'Electron, regardez notre documentation sur les changements de rupture planifiés.

Correctif de vulnérabilité de SQLite

· Une min de lecture

Une vulnérabilité d'exécution de code à distance, "Magellan," a été découverte et affecte les logiciels basés sur SQLite ou Chromium, y compris toutes les versions d'Electron.


Portée

Les applications Electron utilisant Web SQL sont touchées.

Atténuation

Les applications concernées doivent cesser d'utiliser Web SQL ou passer à une version corrigée d'Electron.

Nous avons publié de nouvelles versions d'Electron qui incluent des corrections pour cette vulnérabilité :

Aucun cas n'a été signalé dans la nature; mais les applications concernées sont priées de prendre des mesures d'atténuation.

Informations complémentaires 

Cette vulnérabilité a été découverte par l'équipe de Tencent Blade, qui a publié un billet de blog qui traite de la vulnérabilité.

Pour en savoir plus sur les meilleures pratiques pour sécuriser vos applications Electron, consultez notre tutoriel de sécurité.

Si vous souhaitez signaler une vulnérabilité dans Electron, envoyez un e-mail à security@electronjs.org.

Programme de retours sur les applications Electron

· 3 mins de lecture

Electron travaille à rendre ses cycles de publication plus rapides et plus stables. Pour rendre cela possible, nous avons lancé le programme de rétroaction pour les applications Electron à grande échelle pour tester nos versions bêta et nous signaler les problèmes spécifiques à l'application. Cela nous aide à prioriser le travail qui fera passer les applications à notre prochaine version stable plus tôt.

Modification (21/05/2020): Ce programme a été retiré.


Qui peut rejoindre ?

Nos critères et attentes pour les applications qui rejoignent ce programme incluent les éléments suivants :

  • Testez votre application pendant la période bêta pour plus de 10 000 heures-utilisateurs
  • Avoir une personne-ressource qui vérifiera chaque semaine pour discuter des bogues d'Electron de votre application et des bloqueurs d'applications
  • Vous avez accepté de vous conformer au Code de conduite d'Electron
  • Vous êtes prêt à partager les informations énumérées dans la question suivante

Quelles informations mon application Electron a-t-elle à partager ?

  • Total des heures d'utilisation de votre application avec n'importe quelle version bêta
  • Version d'Electron avec laquelle votre application teste (par exemple, 4.0.0-beta.3)
  • Tout bug empêchant votre application de passer à la ligne de publication en cours de test bêta

Heures-utilisateurs

Nous comprenons que tout le monde ne peut pas partager des nombres d'utilisateurs exacts, mais de meilleures données nous aident à décider de la stabilité d'une version en particulier. Nous demandons que les applications s'engagent à tester un nombre minimum d'heures-utilisateurs, actuellement 10 000 pour tout le cycle bêta.

  • 10 heures-utilisateurs peuvent être de 10 personnes testant pendant une heure ou une personne testant pendant 10 heures
  • Vous pouvez diviser les tests entre des versions bêta, par exemple ceux pour 5 000 heures d'utilisateurs sur la version 3.0.0-beta et ensuite ceux pour 5 000 heures sur 3.0.0-beta.5. Plus on fait, mieux c'est, mais nous comprenons que certaines applications ne peuvent pas tester chaque version bêta
  • Les heures d'intégration continue ou d'assurance qualité ne sont pas prises en compte dans le total, cependant, les versions internes comptent

Pourquoi mon application Electron devrait-elle rejoindre ?

Les bogues de votre application seront suivis et seront sur le radar de l'équipe d'Electron. Vos commentaires aident l'équipe d'Electron à voir comment les nouvelles bêta font et ce qui doit être fait.

Les informations de mon application seront-elles partagées publiquement? Qui peut voir cette information?

Non, les renseignements de votre application ne seront pas partagés publiquement. Les informations sont conservées dans un dépôt GitHub privé qui n'est visible que par les membres du programme de rétroaction de l'application et Electron Governance. Tous les membres ont accepté de suivre le Code de conduite d'Electron.

S'inscrire

Nous acceptons actuellement un nombre limité d'inscriptions. Si vous êtes intéressé et êtes en mesure de remplir les conditions ci-dessus, veuillez remplir ce formulaire.

Electron 3.0.0

· 4 mins de lecture

The Electron team is excited to announce that the first stable release of Electron 3 is now available from electronjs.org and via npm install electron@latest! It's jam-packed with upgrades, fixes, and new features, and we can't wait to see what you build with them. Below are details about this release, and we welcome your feedback as you explore.


Release Process

As we undertook development of v3.0.0, we sought to more empirically define criteria for a stable release by formalizing the feedback progress for progressive beta releases. v3.0.0 would not have been possible without our App Feedback Program partners, who provided early testing and feedback during the beta cycle. Thanks to Atlassian, Atom, Microsoft Teams, Oculus, OpenFin, Slack, Symphony, VS Code, and other program members for their work. If you'd like to participate in future betas, please mail us at info@electronjs.org.

Changes / New Features

Major bumps to several important parts of Electron's toolchain, including Chrome v66.0.3359.181, Node v10.2.0, and V8 v6.6.346.23.

  • [#12656] feat: app.isPackaged
  • [#12652] feat: app.whenReady()
  • [#13183] feat: process.getHeapStatistics()
  • [#12485] feat: win.moveTop() to move window z-order to top
  • [#13110] feat: TextField and Button APIs
  • [#13068] feat: netLog API for dynamic logging control
  • [#13539] feat: enable webview in sandbox renderer
  • [#14118] feat: fs.readSync now works with massive files
  • [#14031] feat: node fs wrappers to make fs.realpathSync.native and fs.realpath.native available

Modifications majeures de l'API

  • [#12362] feat: updates to menu item order control
  • [#13050] refactor: removed documented deprecated APIs
    • See docs for more details
  • [#12477] refactor: removed did-get-response-details and did-get-redirect-request events
  • [#12655] feat: default to disabling navigating on drag/drop
  • [#12993] feat: Node v4.x or greater is required use the electron npm module
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] refactor: NativeWindow
  • [#11968] refactor: menu.popup()
  • [#8953] feat: no longer use JSON to send the result of ipcRenderer.sendSync
  • [#13039] feat: default to ignore command line arguments following a URL
  • [#12004] refactor: rename api::Window to api::BrowserWindow
  • [#12679] feat: visual zoom now turned off by default
  • [#12408] refactor: rename app-command media-play_pause to media-play-pause

macOS

  • [#12093] feat: workspace notifications support
  • [#12496] feat: tray.setIgnoreDoubleClickEvents(ignore) to ignore tray double click events.
  • [#12281] feat: mouse forward functionality on macOS
  • [#12714] feat: screen lock / unlock events

Windows

  • [#12879] feat: added DIP to/from screen coordinate conversions

Nota Bene: Switching to an older version of Electron after running this version will require you to clear out your user data directory to avoid older versions crashing. You can get the user data directory by running console.log(app.getPath("userData")) or see docs for more details.

Bug Fixes

  • [#13397] fix: issue with fs.statSyncNoException throwing exceptions
  • [#13476, #13452] fix: crash when loading site with jquery
  • [#14092] fix: crash in net::ClientSocketHandle destructor
  • [#14453] fix: notify focus change right away rather not on next tick

MacOS

  • [#13220] fix: issue allowing bundles to be selected in <input file="type"> open file dialog
  • [#12404] fix: issue blocking main process when using async dialog
  • [#12043] fix: context menu click callback
  • [#12527] fix: event leak on reuse of touchbar item
  • [#12352] fix: tray title crash
  • [#12327] fix: non-draggable regions
  • [#12809] fix: to prevent menu update while it's open
  • [#13162] fix: tray icon bounds not allowing negative values
  • [#13085] fix: tray title not inverting when highlighted
  • [#12196] fix: Mac build when enable_run_as_node==false
  • [#12157] fix: additional issues on frameless windows with vibrancy
  • [#13326] fix: to set mac protocol to none after calling app.removeAsDefaultProtocolClient
  • [#13530] fix: incorrect usage of private APIs in MAS build
  • [#13517] fix: tray.setContextMenu crash
  • [#14205] fix: pressing escape on a dialog now closes it even if defaultId is set

Linux

  • [#12507] fix: BrowserWindow.focus() for offscreen windows

Other Notes

  • PDF Viewer is currently not working but is being worked on and will be functional once again soon
  • TextField and Button APIs are experimental and are therefore off by default
    • They can be enabled with the enable_view_api build flag

Et maintenant ?

The Electron team continues to work on defining our processes for more rapid and smooth upgrades as we seek to ultimately maintain parity with the development cadences of Chromium, Node, and V8.

Using GN to Build Electron

· 2 mins de lecture

Electron now uses GN to build itself. Here's a discussion of why.


GYP and GN

Lorsque Electron a été publié pour la première fois en 2013, la configuration de construction de Chromium a été écrite avec GYP, abréviation de « Générer vos projets ».

En 2014, le projet Chromium a introduit un nouvel outil de configuration de compilation appelé GN (abréviation de "Générer Ninja") les fichiers de compilation de Chromium ont été migrés vers GN et GYP a été retiré du code source.

Electron a historiquement maintenu une séparation entre le code principal Electron et le libchromiumcontent, la partie d'Electron qui contient le sous-module 'content' de Chromium. Electron has carried on using GYP, while libchromiumcontent -- as a subset of Chromium -- switched to GN when Chromium did.

Like gears that don't quite mesh, there was friction between using the two build systems. Maintaining compatibility was error-prone, from compiler flags and #defines that needed to be meticulously kept in sync between Chromium, Node, V8, and Electron.

To address this, the Electron team has been working on moving everything to GN. Today, the commit to remove the last of the GYP code from Electron was landed in master.

What this means for you

If you're contributing to Electron itself, the process of checking out and building Electron from master or 4.0.0 is very different than it was in 3.0.0 and earlier. See the GN build instructions for details.

If you're developing an app with Electron, there are a few minor changes you might notice in the new Electron 4.0.0-nightly; but more than likely, Electron's change in build system will be totally transparent to you.

What this means for Electron

GN is faster than GYP and its files are more readable and maintainable. Moreover, we hope that using a single build configuration system will reduce the work required to upgrade Electron to new versions of Chromium.

  • It's already helped development on Electron 4.0.0 substantially because Chromium 67 removed support for MSVC and switched to building with Clang on Windows. With the GN build, we inherit all the compiler commands from Chromium directly, so we got the Clang build on Windows for free!

  • It's also made it easier for Electron to use BoringSSL in a unified build across Electron, Chromium, and Node -- something that was problematic before.

Correction de la vulnérabilité WebPreferences

· 3 mins de lecture

Une vulnérabilité d'exécution de code à distance a été découverte dans les applications ayant la capacité d'ouvrir des fenêtres enfants imbriquées sur les versions d'Electron (3.0.0-beta.6, 2.0.7, 1.8.7 et 1.7.15). Cette vulnérabilité a été assignée à l'identifiant CVE CVE-2018-15685.


Plateformes affectées

Vous êtes impacté si :

  1. Vous intégrez n'importe quel contenu d'utilisateur distant, même dans une sandbox
  2. Vous acceptez des entrées utilisateur présentant des vulnérabilités XSS

Détails

Vous êtes impacté si un code utilisateur s'exécute à l'intérieur d'une iframe / peut créer une iframe. Étant donné la possibilité d'une vulnérabilité XSS, on peut supposer que la plupart des applications sont vulnérables à ce cas.

Vous êtes également impacté si vous ouvrez l'une de vos fenêtres avec l'option nativeWindowOpen: true ou sandbox: true. Bien que cette vulnérabilité nécessite également une vulnérabilité XSS pour exister dans votre application, vous devriez quand même appliquer l'une des mesures ci-dessous si vous utilisez l'une de ces options.

Atténuation

Nous avons publié de nouvelles versions d'Electron qui incluent des corrections pour cette vulnérabilité : 3.0.0-beta.7, 2.0.8, 1.8.8, et 1.7.16. Nous demandons instamment à tous les développeurs Electron de mettre à jour leurs applications vers la dernière version stable immédiatement.

Si, pour une raison quelconque, vous n'êtes pas en mesure de mettre à jour votre version d'Electron, vous pouvez protéger votre application en appelant de manière générale event.preventDefault() sur l'événement new-window pour tous les webContents. Si vous n'utilisez pas du tout window.open ou aucune fenêtre enfant, c'est aussi une atténuation valide pour votre application.

mainWindow.webContents.on('new-window', (e) => e.preventDefault());

Si vous comptez sur la capacité de vos fenêtres enfant à créer des fenêtres petit-enfant, une troisième stratégie d'atténuation consiste à utiliser le code suivant sur votre fenêtre de niveau supérieur :

const enforceInheritance = (topWebContents) => {
const handle = (webContents) => {
webContents.on(
'new-window',
(event, url, frameName, disposition, options) => {
if (!options.webPreferences) {
options.webPreferences = {};
}
Object.assign(
options.webPreferences,
topWebContents.getLastWebPreferences()
);
if (options.webContents) {
handle(options.webContents);
}
}
);
};
handle(topWebContents);
};

enforceInheritance(mainWindow.webContents);

Ce code fera en sorte que la webPreferences de la fenêtre de niveau supérieur soit appliquée manuellement à toutes les fenêtres enfants à l'infini.

Informations complémentaires 

Cette vulnérabilité a été découverte et signalée de manière responsable au projet Electron par Matt Austin de Contrast Security.

Pour en savoir plus sur les meilleures pratiques pour sécuriser vos applications Electron, consultez notre tutoriel de sécurité.

Si vous souhaitez signaler une vulnérabilité dans Electron, envoyez un e-mail à security@electronjs.org.

Recherche

· 6 mins de lecture

Le site Web d'Electron a un nouveau moteur de recherche qui fournit des résultats instantanés concernant la documentation des API, les tutoriels, les paquets npm liés à Electron, et plus encore.

Capture d'écran d'Electron Search


L'apprentissage d'une nouvelle technologie ou d'un nouveau framework comme Electron peut être intimidant. Une fois la phase de démarrage rapide dépassée , il peut être difficile d'apprendre les meilleures pratiques ou de trouver les bonnes APIs, ou encore de découvrir les outils qui vous aideront à construire l'application de vos rêves. Notre désir est que le site web d'Electron soit un meilleur outil pour trouver les ressources dont vous avez besoin afin de vous peremettre de construire des applications rapidement et facilement.

Quelle que soit la page où vous vous trouvez sur electronjs.org la nouvelle zone de saisie de recherche est située en haut de la page.

Moteur de recherche

Lorsque nous avons décidé d'ajouter une recherche au site web, nous avons mis en place notre propre moteur de recherche en utilisant GraphQL comme backend. Cela a été un plaisir de travailler avec GraphQL et le moteur de recherche était performant , mais, nous avons rapidement réalisé que ce n'était pas si trivial de construire un moteur de recherche. Les choses comme la recherche par mots multiples ou la détection des fautes de frappe nécessitent beaucoup de travail pour que cela fonctionne correctement. Donc, plutôt que de réinventer la roue, nous avons décidé d'utiliser une solution de recherche existante : Algolia.

Algolia est un service de recherche hébergé qui est devenu rapidement le moteur de recherche favori au sein de projets open source populaires tels que React, Vue, Bootstrap, Yarn et bien d'autres encore.

Voici quelques-unes des fonctionnalités qui ont fait d'Algolia un choix parfaitement adapté au projet Electron :

Documentation de l'API

Parfois, vous savez ce que ce que vous voulez accomplir, mais sans savoir exactement comment le faire. Electron possède plus de 750 méthodes d'API, événements et propriétés. Aucun humain ne peut se souvenir facilement de tous ces éléments, par contre les ordinateurs sont bons à cet égard. En utilisant les données structurées en JSON des API d'Electron, nous avons indexé toutes ces données dans Algolia, et vous pouvez ainsi, facilement trouver exacterment l'API que vous recherchez.

Vous essayez de redimensionner une fenêtre? Recherchez redimensionner et sautez directement à la méthode dont vous avez besoin.

Tutoriels

Electron a une collection toujours croissante de tutoriels pour compléter sa documentation. Maintenant vous trouverez plus facilement des tutoriels sur un sujet donné, en sus de la documentation de l'API associée.

Vous recherchez les bonnes pratiques en matière de sécurité ? Recherchez sécurité.

Packages npm

Il y a maintenant plus de 700 000 packages dans le registre npm et ce n'est pas toujours facile d'y trouver celui dont vous avez besoin. Pour vous y retrouver plus facilement parmi tous ces modules, nous avons créé electron-npm-packages, une collection des plus de 3400 modules du registre construits spécifiquement pour être utilisés avec Electron.

Les gens de Bibliothèques. o ont créé SourceRank, un système de notation de projets logiciels basé sur une combinaison de facteurs comme le code, la communauté, la documentation et l'utilisation. Nous avons créé un module sourceranks qui inclut le score obtenu par chaque module dans le registre npm, et nous utilisons ces scores pour trier les résultats.

Vous voulez des solutions de rechange aux modules IPC intégrés à Electron? Recherche de is:package ipc.

Applications Electron

Il est facile d'indexer des données avec Algolia, nous avons donc ajouté la liste des applications existantes depuis electron/apps.

Essayez une recherche pour [musique] ou [homebrew].

Filtrage des résultats

Si vous avez déja utilisé la recherche de code de GitHub, vous êtes probablement habitué aux filtres par clé-valeur tels que extension:js ou user:defunkt. Nous avons considéré que puisque cette technique de filtrage est très efficace, et nous vons donc ajouter le mot-clé is: à la recherche d'Electron qui vous permett de filtrer les résultats pour n'afficher qu'un seul type:

Les gens aiment les raccourcis clavier ! La nouvelle recherche peut être utilisée entièrement au clavier:

  • / donne le focus au champ de saisie
  • esc donne le focus au champ de saisie et le vide
  • down se déplace jusqu'au résultat suivant
  • up se déplace au résultat précédent ou au champ de saisie
  • enter ouvre un résultat

Nous avons également rendu lopen-source es sources du module qui permet cette interaction avec le clavier. Il est conçu pour être utilisé avec Algolia InstantSearch, mais est suffisament générique pour permettre la compatibilité avec différentes implémentations de recherche.

Votre avis nous est nécessaire

Nous voulons avoir de vos nouvelles si vous rencontrez des problèmes avec le nouvel outil de recherche!

La meilleure façon de soumettre vos commentaires est de déposer un problème sur GitHub dans le dépôt approprié :

Merci

Remerciements spéciaux à Emily Jordan et Vanessa Yuen pour avoir produit ces nouvelles fonctionnalités de recherche, à Librairies.io pour la fourniture de scores SourceRank et à l'équipe d'Algolia pour leur aide lors du démarrage. 🍹