Changements majeurs avec rupture de compatibilité
Breaking changes will be documented here, and deprecation warnings added to JS code where possible, at least one major version before the change is made.
Types de changements majeurs
Ce document utilise la convention suivante pour catégoriser les modifications majeures :
- API modifiée : Une API a été modifiée avec la garantie que du code non modifié déclenchera une exception.
- Comportement modifié : Le comportement d'Electron a changé, mais pas de telle manière qu'une exception soit nécessairement déclenchée.
- Valeur par défaut modifiée : Le code dépendant de l'ancienne valeur par défaut peut ne plus fonctionner, sans nécessairement déclencher une exception. Le comportement d'origine peut être restauré en spécifiant explicitement la valeur.
- Déprécié : une API a été marquée comme étant dépréciée. L'API continuera à fonctionner, mais émettra une alerte de dépréciation, et sera supprimée dans une prochaine version.
- Supprimé: Une API ou une fonctionnalité a été supprimée et n'est plus prise en charge par Electron.
Changements d'API non rétro-compatibles prévus (33.0)
Behavior Changed: frame properties may retrieve detached WebFrameMain instances or none at all
APIs which provide access to a WebFrameMain
instance may return an instance with frame.detached
set to true
, or possibly return null
.
When a frame performs a cross-origin navigation, it enters into a detached state in which it's no longer attached to the page. In this state, it may be running unload handlers prior to being deleted. In the event of an IPC sent during this state, frame.detached
will be set to true
with the frame being destroyed shortly thereafter.
When receiving an event, it's important to access WebFrameMain properties immediately upon being received. Otherwise, it's not guaranteed to point to the same webpage as when received. To avoid misaligned expectations, Electron will return null
in the case of late access where the webpage has changed.
ipcMain.on('unload-event', (event) => {
event.senderFrame; // ✅ accessed immediately
});
ipcMain.on('unload-event', async (event) => {
await crossOriginNavigationPromise;
event.senderFrame; // ❌ returns `null` due to late access
});
Behavior Changed: custom protocol URL handling on Windows
Due to changes made in Chromium to support Non-Special Scheme URLs, custom protocol URLs that use Windows file paths will no longer work correctly with the deprecated protocol.registerFileProtocol
and the baseURLForDataURL
property on BrowserWindow.loadURL
, WebContents.loadURL
, and <webview>.loadURL
. protocol.handle
will also not work with these types of URLs but this is not a change since it has always worked that way.
// No longer works
protocol.registerFileProtocol('other', () => {
callback({ filePath: '/path/to/my/file' })
})
const mainWindow = new BrowserWindow()
mainWindow.loadURL('data:text/html,<script src="loaded-from-dataurl.js"></script>', { baseURLForDataURL: 'other://C:\\myapp' })
mainWindow.loadURL('other://C:\\myapp\\index.html')
// Replace with
const path = require('node:path')
const nodeUrl = require('node:url')
protocol.handle(other, (req) => {
const srcPath = 'C:\\myapp\\'
const reqURL = new URL(req.url)
return net.fetch(nodeUrl.pathToFileURL(path.join(srcPath, reqURL.pathname)).toString())
})
mainWindow.loadURL('data:text/html,<script src="loaded-from-dataurl.js"></script>', { baseURLForDataURL: 'other://' })
mainWindow.loadURL('other://index.html')
Behavior Changed: webContents
property on login
on app
The webContents
property in the login
event from app
will be null
when the event is triggered for requests from the utility process created with respondToAuthRequestsFromMainProcess
option.
Deprecated: textured
option in BrowserWindowConstructorOption.type
The textured
option of type
in BrowserWindowConstructorOptions
has been deprecated with no replacement. This option relied on the NSWindowStyleMaskTexturedBackground
style mask on macOS, which has been deprecated with no alternative.
Removed: macOS 10.15 support
macOS 10.15 (Catalina) is no longer supported by Chromium.
Older versions of Electron will continue to run on Catalina, but macOS 11 (Big Sur) or later will be required to run Electron v33.0.0 and higher.
Déprécié : systemPreferences.accessibilityDisplayShouldReduceTransparency
The systemPreferences.accessibilityDisplayShouldReduceTransparency
property is now deprecated in favor of the new nativeTheme.prefersReducedTransparency
, which provides identical information and works cross-platform.
// Deprecated
const shouldReduceTransparency = systemPreferences.accessibilityDisplayShouldReduceTransparency
// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency
Changements d'API non rétro-compatibles prévus (32.0)
Removed: File.path
The nonstandard path
property of the Web File
object was added in an early version of Electron as a convenience method for working with native files when doing everything in the renderer was more common. However, it represents a deviation from the standard and poses a minor security risk as well, so beginning in Electron 32.0 it has been removed in favor of the webUtils.getPathForFile
method.
// Avant (renderer)
const file = document.querySelector('input[type=file]').files[0]
alert(`Le chemin du fichier téléchargé était: ${file.path}`)
// After (renderer)
const file = document.querySelector('input[type=file]').files[0]
electron.showFilePath(file)
// (preload)
const { contextBridge, webUtils } = require('electron')
contextBridge.exposeInMainWorld('electron', {
showFilePath (file) {
// It's best not to expose the full file path to the web content if
// possible.
const path = webUtils.getPathForFile(file)
alert(`Uploaded file path was: ${path}`)
}
})
Deprecated: clearHistory
, canGoBack
, goBack
, canGoForward
, goForward
, goToIndex
, canGoToOffset
, goToOffset
on WebContents
The navigation-related APIs are now deprecated.
These APIs have been moved to the navigationHistory
property of WebContents
to provide a more structured and intuitive interface for managing navigation history.
// Deprecated
win.webContents.clearHistory()
win.webContents.canGoBack()
win.webContents.goBack()
win.webContents.canGoForward()
win.webContents.goForward()
win.webContents.goToIndex(index)
win.webContents.canGoToOffset()
win.webContents.goToOffset(index)
// Replace with
win.webContents.navigationHistory.clear()
win.webContents.navigationHistory.canGoBack()
win.webContents.navigationHistory.goBack()
win.webContents.navigationHistory.canGoForward()
win.webContents.navigationHistory.goForward()
win.webContents.navigationHistory.canGoToOffset()
win.webContents.navigationHistory.goToOffset(index)
Changements d'API non rétro-compatibles prévus (31.0)
Supprimé: Support de WebSQL
Chromium has removed support for WebSQL upstream, transitioning it to Android only. See Chromium's intent to remove discussion for more information.
Behavior Changed: nativeImage.toDataURL
will preserve PNG colorspace
PNG decoder implementation has been changed to preserve colorspace data, the encoded data returned from this function now matches it.
See crbug.com/332584706 for more information.
Behavior Changed: window.flashFrame(bool)
will flash dock icon continuously on macOS
This brings the behavior to parity with Windows and Linux. Prior behavior: The first flashFrame(true)
bounces the dock icon only once (using the NSInformationalRequest level) and flashFrame(false)
does nothing. New behavior: Flash continuously until flashFrame(false)
is called. This uses the NSCriticalRequest level instead. To explicitly use NSInformationalRequest
to cause a single dock icon bounce, it is still possible to use dock.bounce('informational')
.
Changements d'API non rétro-compatibles prévus (30.0)
Behavior Changed: cross-origin iframes now use Permission Policy to access features
Cross-origin iframes must now specify features available to a given iframe
via the allow
attribute in order to access them.
See documentation for more information.
Removed: The --disable-color-correct-rendering
switch
This switch was never formally documented but it's removal is being noted here regardless. Chromium itself now has better support for color spaces so this flag should not be needed.
Behavior Changed: BrowserView.setAutoResize
behavior on macOS
In Electron 30, BrowserView is now a wrapper around the new WebContentsView API.
Previously, the setAutoResize
function of the BrowserView
API was backed by autoresizing on macOS, and by a custom algorithm on Windows and Linux. For simple use cases such as making a BrowserView fill the entire window, the behavior of these two approaches was identical. However, in more advanced cases, BrowserViews would be autoresized differently on macOS than they would be on other platforms, as the custom resizing algorithm for Windows and Linux did not perfectly match the behavior of macOS's autoresizing API. The autoresizing behavior is now standardized across all platforms.
If your app uses BrowserView.setAutoResize
to do anything more complex than making a BrowserView fill the entire window, it's likely you already had custom logic in place to handle this difference in behavior on macOS. If so, that logic will no longer be needed in Electron 30 as autoresizing behavior is consistent.
Deprecated: BrowserView
The BrowserView
class has been deprecated and replaced by the new WebContentsView
class.
BrowserView
related methods in BrowserWindow
have also been deprecated:
BrowserWindow.fromBrowserView(browserView)
win.setBrowserView(browserView)
win.getBrowserView()
win.addBrowserView(browserView)
win.removeBrowserView(browserView)
win.setTopBrowserView(browserView)
win.getBrowserViews()
Removed: params.inputFormType
property on context-menu
on WebContents
The inputFormType
property of the params object in the context-menu
event from WebContents
has been removed. Utilisez à la place la nouvelle propriété formControlType
.
Supprimé : process.getIOCounters()
Chromium has removed access to this information.
Changements d'API non rétro-compatibles prévus (29.0)
Behavior Changed: ipcRenderer
can no longer be sent over the contextBridge
Attempting to send the entire ipcRenderer
module as an object over the contextBridge
will now result in an empty object on the receiving side of the bridge. This change was made to remove / mitigate a security footgun. You should not directly expose ipcRenderer or its methods over the bridge. Instead, provide a safe wrapper like below:
contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args))
})
Removed: renderer-process-crashed
event on app
The renderer-process-crashed
event on app
has been removed. Utilisez à la place le nouvel événement render-process-gone
.
// Removed
app.on('renderer-process-crashed', (event, webContents, killed) => { /* ... */ })
// Replace with
app.on('render-process-gone', (event, webContents, details) => { /* ... */ })
Removed: crashed
event on WebContents
and <webview>
The crashed
events on WebContents
and <webview>
have been removed. Utilisez à la place le nouvel événement render-process-gone
.
// Removed
win.webContents.on('crashed', (event, killed) => { /* ... */ })
webview.addEventListener('crashed', (event) => { /* ... */ })
// Replace with
win.webContents.on('render-process-gone', (event, details) => { /* ... */ })
webview.addEventListener('render-process-gone', (event) => { /* ... */ })
Removed: gpu-process-crashed
event on app
The gpu-process-crashed
event on app
has been removed. Utilisez à la place le nouvel événement child-process-gone
.
// Removed
app.on('gpu-process-crashed', (event, killed) => { /* ... */ })
// Replace with
app.on('child-process-gone', (event, details) => { /* ... */ })
Changements majeurs prévus de l'API (28.0)
Comportement modifié : L'affectation à false de WebContents.backgroundThrottling
affecte tous les WebContents
de la BrowserWindow
hote
WebContents.backgroundThrottling
défini sur false désactivera la limitation des images dans l' BrowserWindow
pour tous les WebContents
qu'elle affichera.
Supprimé : BrowserWindow.setTrafficLightPosition(position)
BrowserWindow.setTrafficLightPosition(position)
a été supprimé, l'API BrowserWindow.setWindowButtonPosition(position)
doit être utilisée à la place et prend comme paramètres null
au lieu de { x: 0, y: 0 }
pour réinitialiser la position à celle par défaut du système.
// Supprimé dans Electron 28
win.setTrafficLightPosition({ x: 10, y: 10 })
win.setTrafficLightPosition({ x: 0, y: 0 })
// A remplacer par
win.setWindowButtonPosition({ x: 10, y: 10 })
win.setWindowButtonPosition(null)
Supprimé : BrowserWindow.getTrafficLightPosition()
BrowserWindow.getTrafficLightPosition()
a été supprimé, l’API BrowserWindow.getWindowButtonPosition()
doit être utilisée à la place, elle retourne null
au lieu de { x: 0, y: 0 }
en absence de position personnalisée.
// Supprimé dans Electron 28
const pos = win.getTrafficLightPosition()
if (pos.x === 0 && pos.y === 0) {
// Aucune position personalisée.
}
// A Remplacer par
const ret = win.getWindowButtonPosition();
if (ret === null) {
// Aucune position personalisée.
}
Supprimé : ipcRenderer.sendTo()
La méthode ipcRenderer.sendTo()
a été supprimée. It should be replaced by setting up a MessageChannel
between the renderers.
Les propriétés senderId
et senderIsMainFrame
de IpcRendererEvent
ont également été supprimées.
Supprimé : app.runningUnderRosettaTranslation
La propriété app.runningUnderRosettaTranslation
a été supprimée. Vous devez maintenant utiliser app.runningUnderARM64Translation
à la place.
// Supprimé
console.log(app.runningUnderRosettaTranslation)
// A remplacer par
console.log(app.runningUnderARM64Translation)
Deprecated: renderer-process-crashed
event on app
The renderer-process-crashed
event on app
has been deprecated. Utilisez à la place le nouvel événement render-process-gone
.
// Déprécié
app.on('renderer-process-crashed', (event, webContents, killed) => { /* ... */ })
// Remplacé par
app.on('render-process-gone', (event, webContents, details) => { /* ... */ })
Deprecated: params.inputFormType
property on context-menu
on WebContents
The inputFormType
property of the params object in the context-menu
event from WebContents
has been deprecated. Utilisez à la place la nouvelle propriété formControlType
.
Deprecated: crashed
event on WebContents
and <webview>
The crashed
events on WebContents
and <webview>
have been deprecated. Utilisez à la place le nouvel événement render-process-gone
.
// Déprécié
win.webContents.on('crashed', (event, killed) => { /* ... */ })
webview.addEventListener('crashed', (event) => { /* ... */ })
// Remplacé par
win.webContents.on('render-process-gone', (event, details) => { /* ... */ })
webview.addEventListener('render-process-gone', (event) => { /* ... */ })
Deprecated: gpu-process-crashed
event on app
The gpu-process-crashed
event on app
has been deprecated. Utilisez à la place le nouvel événement child-process-gone
.
// Déprécié
app.on('gpu-process-crashed', (event, killed) => { /* ... */ })
// Remplacé par
app.on('child-process-gone', (event, details) => { /* ... */ })
Changements majeurs prévus de l'API (27.0)
Supprimé: support de macOS 10.13 / 10.14
macOS 10.13 (High Sierra) et macOS 10.14 (Mojave) ne sont plus pris en charge par Chromium.
Les anciennes versions d'Electron continueront à fonctionner sur ces systèmes d'exploitation, mais macOS 10. 3 (High Sierra) ou plus récent sera nécessaire pour exécuter Electron v20.0.0 et supérieur.
Déprécié : ipcRenderer.sendTo()
La méthode ipcRenderer.sendTo()
a été dépréciée. It should be replaced by setting up a MessageChannel
between the renderers.
Les propriétés senderId
et senderIsMainFrame
de IpcRendererEvent
ont également été dépréciées.
Supprimé: les événements du color scheme dans systemPreferences
Les événements suivants de systemPreferences
ont été supprimés:
inverted-color-scheme-changed
high-contrast-color-scheme-changed
Utilisez à la place le nouvel événement updated
du module nativeTheme
.
// Supprimé
systemPreferences.on('inverted-color-scheme-changed', () => { /* ... */ })
systemPreferences.on('high-contrast-color-scheme-changed', () => { /* ... */ })
// A remplacer par
nativeTheme.on('updated', () => { /* ... */ })
Supprimé: Quelques options de window.setVibrancy
sur macOS
Les options de vibrancy suivantes ont été supprimées :
- 'light'
- 'medium-light'
- 'dark'
- 'ultra-dark'
- 'appearance-based'
Celles-ci avaient été précédemment dépréciées et supprimées par Apple sur 10.15.
Supprimé : webContents.getPrinters
La méthode webContents.getPrinters
a été supprimée. Utilisez webContents.getPrintersAsync
à la place.
const w = new BrowserWindow({ show: false })
// Supprimé
console.log(w.webContents.getPrinters())
// Remplacé par
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers)
})
Supprimé: systemPreferences.{get,set}AppLevelAppearance
et systemPreferences.appLevelAppearance
Les méthodes systemPreferences.getAppLevelAppearance
et systemPreferences.setAppLevelAppearance
sont obsolètes et supprimées, ainsi que la propriété systemPreferences.appLevelAppearance
. Utiliser l'Api nativeTheme
à la place .
// Supprimé
systemPreferences.getAppLevelAppearance()
// Remplacé par
nativeTheme.shouldUseDarkColors
// Supprimé
systemPreferences.appLevelAppearance
// Remplacé par
nativeTheme.shouldUseDarkColors
// Supprimé
systemPreferences.setAppLevelAppearance('dark')
// Remplacé par
nativeTheme.themeSource = 'dark'
Supprimé: La valeur alternate-selected-control-text
de systemPreferences.getColor
La valeur alternate-selected-control-text
pour systemPreferences.getColor
a été supprimée. Utilisez selected-content-background
à la place.
// Supprimé
systemPreferences.getColor('alternate-selected-control-text')
// Remplacé par
systemPreferences.getColor('selected-content-background')
Changements d'API non rétro-compatibles prévus (26.0)
Déprécié : webContents.getPrinters
La méthode webContents.getPrinters
a été dépréciée. Utilisez webContents.getPrintersAsync
à la place.
const w = new BrowserWindow({ show: false })
// Déprécié
console.log(w.webContents.getPrinters())
// A remplacer par
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers)
})
Déprécié: systemPreferences.{get,set}AppLevelAppearance
and systemPreferences.appLevelAppearance
Les méthodes systemPreferences.getAppLevelAppearance
et systemPreferences.setAppLevelAppearance
sont obsolètes, ainsi que la propriété systemPreferences.appLevelAppearance
. Utiliser l'Api nativeTheme
à la place .
// Déprécié
systemPreferences.getAppLevelAppearance();
// Remplacer par
nativeTheme.shouldUseDarkColors;
// Déprécié
systemPreferences.appLevelAppearance;
// Remplacer par
nativeTheme.shouldUseDarkColors;
// Déprécié
systemPreferences.setAppLevelAppearance('dark');
// Remplacer par
nativeTheme.themeSource = 'dark'
Déprécié: valeur alternate-selected-control-text
pour systemPreferences.getColor
Déprécié: la valeur alternate-selected-control-text
pour systemPreferences.getColor
. Utilisez selected-content-background
à la place.
// Déprécié
systemPreferences.getColor('alternate-selected-control-text');
// A Remplacer par
systemPreferences.getColor('selected-content-background')
Changements majeurs prévus de l'API (25.0)
Deprecated: protocol.{un,}{register,intercept}{Buffer,String,Stream,File,Http}Protocol
and protocol.isProtocol{Registered,Intercepted}
Les méthodes protocol.register*Protocol
et protocol.intercept*Protocol
ont étés remplacées par protocol.handle
.
La nouvelle méthode peut soit enregistrer un nouveau protocole ou intercepter un protocole existant, les réponses peuvent être de n'importe quel type.
// Déprécié dans Electron 25
protocol.registerBufferProtocol('some-protocol', () => {
callback({ mimeType: 'text/html', data: Buffer.from('<h5>Response</h5>') });
});
// Remplacé par
protocol.handle('some-protocol', () => {
return new Response(
Buffer.from('<h5>Response</h5>'), // Peut aussi être une chaîne de caractères ou ReadableStream.
{ headers: { 'content-type': 'text/html' } }
)
})
// Déprécié dans Electron 25
protocol.registerHttpProtocol('some-protocol', () => {
callback({ url: 'https://electronjs.org' });
});
// Remplacé par
protocol.handle('some-protocol', () => {
return net.fetch('https://electronjs.org');
})
// Déprécié dans Electron 25
protocol.registerFileProtocol('some-protocol', () => {
callback({ filePath: '/path/to/my/file' });
});
// Remplacé par
protocol.handle('some-protocol', () => {
return net.fetch('file:///path/to/my/file');
})
Déprécié : BrowserWindow.setTrafficLightPosition(position)
BrowserWindow.setTrafficLightPosition(position)
a été déprécié, l'API BrowserWindow.setWindowButtonPosition(position)
doit être utilisée à la place et prend comme paramètres null
au lieu de { x: 0, y: 0 }
pour réinitialiser la position à celle par défaut du système.
// Déprécié dans Electron 25
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });
// Remplacé par
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null)
Déprécié : BrowserWindow.getTrafficLightPosition()
BrowserWindow.getTrafficLightPosition()
a été déprécié, l’API BrowserWindow.getWindowButtonPosition()
doit être utilisée à la place, elle retourne null
au lieu de { x: 0, y: 0 }
en absence de position personnalisée.
// Déprécié dans Electron 25
const pos = win.getTrafficLightPosition()
if (pos. === 0 && pos.y === 0) {
// Aucune position personnalisée.
}
// A Remplacer par
const ret = win.getWindowButtonPosition();
if (ret === null) {
// Aucune position personalisée.
}
Changements API non rétro-compatibles prévus (24.0)
API modifiée : nativeImage.createThumbnailFromPath(path, size)
Le paramètre maxSize
a été changé en size
pour refléter que la taille passée sera la taille que la miniature a créée. Auparavant, Windows ne redimensionnerait pas l’image si elle était plus petite que maxSize
, et macOS définissait toujours la taille à maxSize
. Désormais, le comportement est le même sur toutes les plateformes.
Comportement modifié:
// a 128x128 image.
const imagePath = path.join('path', 'to', 'capybara.png');
// Mise à l'échelle d'une image plus petite.
const upSize = { width: 256, height: 256 }
nativeImage.createThumbnailFromPath(imagePath, upSize).then(result => {
console.log(result.getSize()) // { width: 256, height: 256 }
})
// Mise à l'échelle d'une image plus grande.
const downSize = { width: 64, height: 64 }
nativeImage.createThumbnailFromPath(imagePath, downSize).then(result => {
console.log(result.getSize()) // { width: 64, height: 64 }
})
Comportement précédent (sous Windows):
// a 128x128 image
const imagePath = path.join('path', 'to', 'capybara.png')
const size = { width: 256, height: 256 }
nativeImage.createThumbnailFromPath(imagePath, size).then(result => {
console.log(result.getSize()) // { width: 128, height: 128 }
})
Changements API non rétro-compatibles prévus (23.0)
Changement de comportement : Régions déplaçables sur macOS
L’implémentation des régions déplaçables (en utilisant la propriété CSS -webkit-app-region: drag
) a été modifiée pour macOS afin de s'aligner avec Windows et Linux. Auparavant, lorsqu’une région avec -webkit-app-region: no-drag
chevauchait une région avec -webkit-app-region: drag
, la région no-drag
avait toujours, sur macOS, priorité indépendamment de la superposition CSS. Autrement dit, si une région drag
se trouvait au-dessus d’une région no-drag
, elle était ignorée. À partir d’Electron 23, une région drag
située au-dessus d’une région no-drag
fera glisser correctement la région.
De plus, la propriété customButtonsOnHover
de BrowserWindow créait précédemment une région glissable qui ignorait la propriété CSS -webkit-app-region
. Cette erreur a été corrigée (voir #37210 pour la discussion a ce sujet).
En conséquence, si votre application sur macOS utilise une fenêtre sans cadre avec des régions déplaçables , les régions déplaçables dans votre application peuvent changer avec Electron 23.
Supprimé: prise en charge de Windows 7 / 8 / 8.1
Windows 7, Windows 8 et Windows 8.1 ne sont plus pris en charge. Electron suit la politique de dépréciation de Chromium qui dépréciera la prise en charge de Windows 7 à partir de Chromium 109.
Les anciennes versions d'Electron continueront à fonctionner sur ces systèmes d'exploitation, mais ce sera nécessaire d'être sous Windows 10 ou ultérieur pour exécuter Electron v23. . 0 et plus.
Supprimé: Évènements BrowserWindow scroll-touch-*
Les événements dépréciés scroll-touch-begin
, scroll-touch-end
et scroll-touch-edge
de BrowserWindow ont été supprimés. Instead, use the newly available input-event
event on WebContents.
// Supprimé avec Electron 23.0
win.on('scroll-touch-begin', scrollTouchBegin)
win.on('scroll-touch-edge', scrollTouchEdge)
win.on('scroll-touch-end', scrollTouchEnd)
// A remplacer par
win.webContents.on('input-event', (_, event) => {
if (event.type === 'gestureScrollBegin') {
scrollTouchBegin()
} else if (event.type === 'gestureScrollUpdate') {
scrollTouchEdge()
} else if (event.type === 'gestureScrollEnd') {
scrollTouchEnd()
}
})
Supprimé : webContents.incrementCapturerCount(stayHidden, stayAwake)
La fonction webContents.incrementCapturerCount(stayHidden, stayAwake)
a été supprimée. La gestion est maintenant automatiquement réalisée par webContents.capturePage
lorsqu'une capture de page est terminée.
const w = new BrowserWindow({ show: false })
// Supprimé avec Electron 23
w.webContents.incrementCapturerCount()
w.capturePage().then(image => {
console.log(image.toDataURL())
w.webContents.decrementCapturerCount()
})
// A remplacer par
w.capturePage().then(image => {
console.log(image.toDataURL())
})
Supprimé : webContents.decrementCapturerCount(stayHidden, stayAwake)
La fonction webContents.decrementCapturerCount(stayHidden, stayAwake)
a été supprimée. La gestion est maintenant automatiquement réalisée par webContents.capturePage
lorsqu'une capture de page est terminée.
const w = new BrowserWindow({ show: false })
// Supprimé avec Electron 23
w.webContents.incrementCapturerCount()
w.capturePage().then(image => {
console.log(image.toDataURL())
w.webContents.decrementCapturerCount()
})
// A remplacer par
w.capturePage().then(image => {
console.log(image.toDataURL())
})
Changements API non rétro-compatibles prévus (22.0)
Déprécié : webContents.incrementCapturerCount(stayHidden, stayAwake)
webContents.incrementCapturerCount(stayHidden, stayAwake)
a été déprécié. La gestion est maintenant automatiquement réalisée par webContents.capturePage
lorsqu'une capture de page est terminée.
const w = new BrowserWindow({ show: false })
// Supprimé avec Electron 23
w.webContents.incrementCapturerCount()
w.capturePage().then(image => {
console.log(image.toDataURL())
w.webContents.decrementCapturerCount()
})
// A remplacer par
w.capturePage().then(image => {
console.log(image.toDataURL())
})
Déprécié : webContents.decrementCapturerCount(stayHidden, stayAwake)
webContents.decrementCapturerCount(stayHidden, stayAwake)
a été déprécié. La gestion est maintenant automatiquement réalisée par webContents.capturePage
lorsqu'une capture de page est terminée.
const w = new BrowserWindow({ show: false })
// Supprimé avec Electron 23
w.webContents.incrementCapturerCount()
w.capturePage().then(image => {
console.log(image.toDataURL())
w.webContents.decrementCapturerCount()
})
// A remplacer par
w.capturePage().then(image => {
console.log(image.toDataURL())
})
Supprimé: l'évènement new-window
du module WebContents
L'évènement new-window
de WebContents a été supprimé. It is replaced by webContents.setWindowOpenHandler()
.
// Supprimé dans Electron 22
webContents.on('new-window', (event) => {
event.preventDefault()
})
// A remplacer par
webContents.setWindowOpenHandler((details) => {
return { action: 'deny' }
})
Supprimé : évènement <webview>
new-window
L'évènement new-window
de <webview>
a été supprimé. Il n'y a pas de remplacement direct.
// Supprimé dans Electron 22
webview.addEventListener('new-window', (event) => {})
// Replace with
// main.js
mainWindow.webContents.on('did-attach-webview', (event, wc) => {
wc.setWindowOpenHandler((details) => {
mainWindow.webContents.send('webview-new-window', wc.id, details)
return { action: 'deny' }
})
})
// preload.js
const { ipcRenderer } = require('electron')
ipcRenderer.on('webview-new-window', (e, webContentsId, details) => {
console.log('webview-new-window', webContentsId, details)
document.getElementById('webview').dispatchEvent(new Event('new-window'))
})
// renderer.js
document.getElementById('webview').addEventListener('new-window', () => {
console.log('got new-window event')
})
Dépréciés: Les évènements BrowserWindow scroll-touch-*
Les évènements scroll-touch-begin
, scroll-touch-end
et scroll-touch-edge
de BrowserWindow sont dépréciés. Instead, use the newly available input-event
event on WebContents.
// Déprécié
win.on('scroll-touch-begin', scrollTouchBegin)
win.on('scroll-touch-edge', scrollTouchEdge)
win.on('scroll-touch-end', scrollTouchEnd)
// A Remplacer par
win.webContents.on('input-event', (_, event) => {
if (event.type === 'gestureScrollBegin') {
scrollTouchBegin()
} else if (event.type === 'gestureScrollUpdate') {
scrollTouchEdge()
} else if (event.type === 'gestureScrollEnd') {
scrollTouchEnd()
}
})
Changements API non rétro-compatibles prévus (21.0)
Comportement modifié : Cage mémoire V8 activée
La cage mémoire V8 a été activée et cala a des implications pour les modules natifs encapsulant de la mémoire non-V8 avec ArrayBuffer
ou Buffer
. See the blog post about the V8 memory cage for more details.
API modifiée : webContents.printToPDF()
webContents.printToPDF()
a été modifié afin d'être conforme à Page.printToPDF
du Protocole des Chrome DevTools. Cela a été modifié afin de traiter les changements en amont qui ont rendu notre implémentation précédente intenable et débordant de bugs.
Arguments modifiés
pageRanges
Arguments supprimés
printSelectionOnly
marginsType
headerFooter
scaleFactor
Arguments ajoutés
headerTemplate
footerTemplate
displayHeaderFooter
margins
scale
preferCSSPageSize
// Main process
const { webContents } = require('electron')
webContents.printToPDF({
landscape: true,
displayHeaderFooter: true,
printBackground: true,
scale: 2,
pageSize: 'Ledger',
margins: {
top: 2,
bottom: 2,
left: 2,
right: 2
},
pageRanges: '1-5, 8, 11-13',
headerTemplate: '<h1>Title</h1>',
footerTemplate: '<div><span class="pageNumber"></span></div>',
preferCSSPageSize: true
}).then(data => {
fs.writeFile(pdfPath, data, (error) => {
if (error) throw error
console.log(`Wrote PDF successfully to ${pdfPath}`)
})
}).catch(error => {
console.log(`Failed to write PDF to ${pdfPath}: `, error)
})
Changements majeurs prévus de l'API (20.0)
Supprimé: support macOS 10.11 / 10.12
macOS 10.11 (El Capitan) et macOS 10.12 (Sierra) ne sont plus pris en charge par Chromium.
Les anciennes versions d'Electron continueront à fonctionner sur ces systèmes d'exploitation, mais macOS 10. 3 (High Sierra) ou plus récent sera nécessaire pour exécuter Electron v20.0.0 et supérieur.
Modification de valeur par défaut : les renderers sans nodeIntegration: true
sont mis par défaut en bac à sable
Auparavant, les moteurs de rendu (renderers) qui spécifiaient un script de préchargement n'étaient pas par défaut en bac à sable. Cela signifiait que par défaut, les scripts de préchargement avaient accès à Node.js. Dans Electron 20, cette valeur par défaut a changé. À partir d’Electron 20, les renderers seront mis en bac à sable par défaut, sauf si nodeIntegration: true
ou sandbox: false
est spécifié.
Si vos scripts de préchargement ne dépendent pas de Node, aucune action n’est nécessaire. Si vos scripts de préchargement dépendent de Node, refactorisez pour supprimer les d’utilisation de Node du moteur de rendu ou spécifiez explicitement sandbox: false
pour ceux qui sont concernés.
Supprimé : skipTaskbar
sous Linux
Avec X11, skipTaskbar
envoie le message _NET_WM_STATE_SKIP_TASKBAR
au gestionnaire de fenêtres X11 . Il n'y a pas d'équivalent direct à Wayland, et les contournements connus impliquent des compromis inacceptables (par ex. Window.is_skip_taskbar dans GNOME nécessite un mode non sécurisé), donc Electron ne peut pas prendre en charge cette fonctionnalité sous Linux.
API modifiée : session.setDevicePermissionHandler(handler)
Le gestionnaire invoqué lorsque session.setDevicePermissionHandler(handler)
est utilisé voit ses arguments modifiés. This handler no longer is passed a frame WebFrameMain
, but instead is passed the origin
, which is the origin that is checking for device permission.
Changements majeurs prévus de l'API (19.0)
Suppression: binaires IA32 Linux
Ceci est le résultat de la fin du support de IA32 Linux par Chromium. Ceci conclut la suppression de la prise en charge de IA32 Linux.
Changements majeurs prévus de l'API (18.0)
Supprimé : nativeWindowOpen
Avant Electron 15, window.open
utilisait par défaut BrowserWindowProxy
. Cela signifiait, entre autres incompatibilités, que window.open('about:blank')
ne fonctionnait pas pour ouvrir des fenêtres enfants scriptables de manière synchrone. Depuis Electron 15, nativeWindowOpen
est activé par défaut.
See the documentation for window.open in Electron for more details.
Changements majeurs prévus de l'API (17.0)
Supprimé: desktopCapturer.getSources
dans le moteur de rendu
Dorénavant l’API desktopCapturer.getSources
n’est plus disponible que dans le processus principal. Cela a été modifié afin d’améliorer la sécurité par défaut des applications Electron .
Si vous avez besoin de cette fonctionnalité, elle peut être remplacée comme suit :
// Main process
const { ipcMain, desktopCapturer } = require('electron')
ipcMain.handle(
'DESKTOP_CAPTURER_GET_SOURCES',
(event, opts) => desktopCapturer.getSources(opts)
)
// Processus de rendu
const { ipcRenderer } = require('electron')
const desktopCapturer = {
getSources: (opts) => ipcRenderer.invoke('DESKTOP_CAPTURER_GET_SOURCES', opts)
}
Toutefois, vous devez envisager de restreindre davantage les informations renvoyées au moteur de rendu ; par exemple en affichant pour l'utilisateur un sélecteur de source et retourner ce qui provient de la source sélectionnée.
Déprécié : nativeWindowOpen
Avant Electron 15, window.open
utilisait par défaut BrowserWindowProxy
. Cela signifiait, entre autres incompatibilités, que window.open('about:blank')
ne fonctionnait pas pour ouvrir des fenêtres enfants scriptables de manière synchrone. Depuis Electron 15, nativeWindowOpen
est activé par défaut.
See the documentation for window.open in Electron for more details.
Changements majeurs prévus de l'API (16.0)
Changement de comportement : l'implémentation de crashReporter
utilise Crashpad sous Linux
L'implémentation sous-jacente de l'API crashReporter
sous Linux est passée de Breakpad à Crashpad, le rendant conforme à Windows et Mac. En conséquence, les processus enfants sont désormais automatiquement monitorés et l’appel de process.crashReporter.start
dans les processus enfants de Node n’est plus nécessaire (ni conseillé d'ailleurs, car il démarrerait une deuxième instance du rapporteur Crashpad).
Il y a aussi quelques changements subtils dans la façon dont les annotations seront signalées sous Linux, notamment les valeurs longues ne seront plus présentées dans plusieurs annotations suffixées par __1
, __2
etc., mais seront plutôt tronquées à la taille limite des annotations (nouvelle et plus longue).
Obsolète : desktopCapturer.getSources
dans le moteur de rendu
L’utilisation de l’API desktopCapturer.getSources
dans le moteur de rendu est Obsolète et sera supprimée. Ce changement améliore la sécurité par défaut des applications Electron.
Consultez ceci pour plus d’informations sur comment remplacer cette API dans votre application.
Changements majeurs prévus de l'API (15.0)
Valeur par défaut modifié : nativeWindowOpen
est par défaut à true
Avant Electron 15, window.open
utilisait par défaut BrowserWindowProxy
. Cela signifiait, entre autres incompatibilités, que window.open('about:blank')
ne fonctionnait pas pour ouvrir des fenêtres enfants scriptables de manière synchrone. nativeWindowOpen
n'est plus expérimental, et est maintenant la valeur par défaut.
See the documentation for window.open in Electron for more details.
Déprécié : app.runningUnderRosettaTranslation
The app.runningUnderRosettaTranslation
property has been deprecated. Vous devez maintenant utiliser app.runningUnderARM64Translation
à la place.
// Déprécié
console.log(app.runningUnderRosettaTranslation)
// Remplacer par
console.log(app.runningUnderARM64Translation)
Changements majeurs prévus de l'API (14.0)
Supprimé: module remote
Le module remote
a été déprécié dans Electron 12, et sera supprimé dans Electron 14. Il est remplacé par le module @electron/remote
.
// Déprécié dans Electron 12 :
const { BrowserWindow } = require('electron').remote
A remplacer par :
const { BrowserWindow } = require('@electron/remote')
// Dans le processus principal:
require('@electron/remote/main').initialize()
Supprimé : app.allowRendererProcessReuse
La propriété app.allowRendererProcessReuse
sera supprimée dans le cadre de notre plan visant à être le plus étroitement aligné sur le modèle de processus de Chromium en matière de sécurité, de performance et de maintenabilité.
Pour des informations plus détaillées, voir #18397.
Suppression : Browser Window Affinity
L'option affinity
utilisée lors de l'instanciation d'une nouvelle BrowserWindow
sera supprimée dans le cadre de notre plan d'alignement sur le modèle de processus de Chromium à des fins de sécurité, performances et maintenabilité.
Pour des informations plus détaillées, voir #18397.
API modifiée : window.open()
Le paramètre facultatif frameName
ne définira plus le titre de la fenêtre. Ceci conformément à la spécification décrite par la documentation native sous le paramètre correspondant windowName
.
If you were using this parameter to set the title of a window, you can instead use win.setTitle(title).
Supprimé : worldSafeExecuteJavaScript
Dans Electron 14, worldSafeExecuteJavaScript
sera supprimé. Il n'y a pas d'alternative, veuillez vous assurer que votre code fonctionne avec cette propriété activée. Il a été activé par défaut depuis Electron 12
12.
Vous serez affecté par ce changement si vous utilisez webFrame.executeJavaScript
ou webFrame.executeJavaScriptInIsolatedWorld
. You will need to ensure that values returned by either of those methods are supported by the Context Bridge API as these methods use the same value passing semantics.
Supprimé: BrowserWindowConstructorOptions héritées des fenêtres parentes
Avant d'Electron 14, les fenêtres ouvertes avec window.open
héritaient des options du constructeur BrowserWindow telles que transparent
et resizable
de leur fenêtre parente. À partir d'Electron 14, ce comportement est supprimé et les fenêtres n'hériteront d'aucune option du constructeur BrowserWindow de leurs parents.
À la place, vous devez définir explicitement les options de la nouvelle fenêtre avec setWindowOpenHandler
:
webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
// ...
}
}
})
Supprimé : additionalFeatures
La propriété additionalFeatures
de new-window
et l'événement did-create-window
de WebContents qui étaient dépréciés ont été supprimés. Comme new-window
utilise des arguments de positions, l'argument est toujours présent mais sera toujours un tablea vide []
. (Notez toutefois que l’événement new-window
lui-même est déprécié et remplacé par setWindowOpenHandler
.) Les clés sans valeur dans les features d'une window seront désormais représentées par des clés avec la valeur true
dans l'objet options.
// Supprimé avec Electron 14
// Triggered by window.open('...', '', 'my-key')
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
})
// Remplacé par
webContents.on('did-create-window', (window, details) => {
if (details.options['my-key']) {
// ...
}
})
Changements majeurs prévus de l'API (13.0)
API modifiée : session.setPermissionCheckHandler(handler)
Le premier paramètre handler
des méthodes était auparavant toujours un webContents
, il peut maintenant parfois être null
. Vous devez utiliser les propriétés requestingOrigin
, embeddingOrigin
et securityOrigin
pour répondre correctement à la vérification des permissions. Comme le webContents
peut être désormais null
, on ne peut plus s'y fier.
// Ancien code:
session.setPermissionCheckHandler((webContents, permission) => {
if (webContents.getURL().startsWith('https://google.com/') && permission === 'notification') {
return true
}
return false
})
// A remplacer par:
session.setPermissionCheckHandler((webContents, permission, requestingOrigin) => {
if (new URL(requestingOrigin).hostname === 'google.com' && permission === 'notification') {
return true
}
return false
})
Supprimé : shell.moveItemToTrash()
L’API shell.moveItemToTrash()
synchrone qui était dépréciée a été supprimée. Utilisez shell.trashItem() asynchrone
à la place.
// Supprimé dans Electron 13
shell.moveItemToTrash(path)
// Remplacer par
shell.trashItem(path).then(/* ... */)
Removed: BrowserWindow
extension APIs
Les API d'extension obsolètes ont été supprimées :
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
Utilisez plutôt les API de session :
chemin ses.loadExtension(path)
ses.removeExtension(extension_id)
ses.getAllExtensions()
// Supprimé dans Electron 13
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
// Remplacer par
session.defaultSession.loadExtension(path)
Supprimé dans Electron 13
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
// Remplacer par
session.defaultSession.removeExtension(extension_id)
Supprimé dans Electron 13
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
// Remplacer par
session.defaultSession.getAllExtensions()
Méthodes supprimées dans systemPreferences
Les méthodes suivantes de systemPreferences
ont été dépréciées :
systemPreferences.isDarkMode()
systemPreferences.isInvertedColorScheme()
systemPreferences.isHighContrastColorScheme()
Veuillez utiliser à la place les propriétés de nativeTheme
suivantes :
nativeTheme.shouldUseDarkColors
nativeTheme.shouldUseInvertedColorScheme
nativeTheme.shouldUseHighContrastColors
// Supprimée dans Electron 13
systemPreferences.isDarkMode()
// Remplacée par
nativeTheme.shouldUseDarkColors
// Supprimée dans Electron 13
systemPreferences.isInvertedColorScheme()
// Remplacée par
nativeTheme.shouldUseInvertedColorScheme
// Supprimée dans Electron 13
systemPreferences.isHighContrastColorScheme()
// Remplacée par
nativeTheme.shouldUseHighContrastColors
Obsolète : événement WebContents new-window
L'événement new-window
de WebContents est déprécié. It is replaced by webContents.setWindowOpenHandler()
.
// Déprécié dans Electron 13
webContents.on('new-window', (event) => {
event.preventDefault()
})
// Remplacer par
webContents.setWindowOpenHandler((details) => {
return { action: 'deny' }
})
Changements majeurs prévus de l'API (12.0)
Supprimé: Support de Pepper Flash
Chromium a supprimé la prise en charge de Flash, nous devons donc emboîter le pas. Consultez la feuille de route Flash de Chromium pour plus de détails.
Changements de rupturetrue
Dans Electron 12, worldSafeExecuteJavaScript
sera activé par défaut. Restaurer le comportement précédent, worldSafeExecuteJavaScript: false
doit être spécifié dans WebPreferences. Veuillez noter que définir cette option sur false
est non sécurisé.
Cette option sera supprimée dans Electron 14, veuillez donc migrer votre code pour prendre en charge la valeur par défaut.
Valeur par défaut modifié : contextIsolation
est par défaut à true
Dans Electron 12, contextIsolation
sera activé par défaut. Restaurer le comportement précédent, contextIsolation: false
doit être spécifié dans WebPreferences.
We recommend having contextIsolation enabled for the security of your application.
En conséquence require()
ne peut pas être utilisé dans le processus de rendu à sauf si nodeIntegration
est à true
et contextIsolation
à false
.
Pour plus de détails, voir : https://github.com/electron/electron/issues/23506
Supprimé : crashReporter.getCrashesDirectory()
La méthode crashReporter.getCrashesDirectory
a été supprimée. Usage Devrait être remplacé par app.getPath('crashDumps')
.
// Supprimé dans Electron 12
crashReporter.getCrashesDirectory()
// Remplacé par
app.getPath('crashDumps')
Supprimé : méthodes crashReporter
dans le processus de rendu
Les méthodes crashReporter
suivantes ne sont plus disponibles dans le processus de rendu :
crashReporter.start
crashReporter.getLastCrashReport
crashReporter.getUploadedReports
crashReporter.getUploadToServer
crashReporter.setUploadToServer
crashReporter.getCrashesDirectory
Ils ne doivent être appelés qu'à partir du processus principal.
Voir #23265 pour plus de détails.
Valeur par défaut modifiée : crashReporter.start({ compress: true })
La valeur par défaut de l'option compress
en crashReporter.start
a changé de false
à true
. Cela signifie que les rapports de plantage seront envoyés au serveur d'ingestion de plantage avec l'en-tête Content-Encoding: gzip
et le corps sera compressé.
Si votre serveur d'ingestion de plantage ne supporte pas les payloads compressées, vous pouvez désactiver la compression en spécifiant { compress: false }
dans les options du rapporteur de plantage.
Déprécié : moduleremote
Le module remote
est déprécié dans Electron 12, et sera supprimé dans Electron 14. Il est remplacé par le module @electron/remote
.
// Déprécié dans Electron 12 :
const { BrowserWindow } = require('electron').remote
A remplacer par :
const { BrowserWindow } = require('@electron/remote')
// Dans le processus principal:
require('@electron/remote/main').initialize()
Déprécié : shell.moveItemToTrash()
La méthode synchrone shell.moveItemToTrash()
a été remplacée par une asynchrone shell.trashItem()
.
Déprécié dans Electron 12
shell.moveItemToTrash(path)
// Remplacer par
shell.trashItem(path).then(/* ... */)
Changements majeurs prévus de l'API (11.0)
Supprimés: BrowserView.{destroy, fromId, fromWebContents, getAllViews}
et id
propriété de BrowserView
Les API expérimentales BrowserView.{destroy, fromId, fromWebContents, getAllViews}
ont maintenant été supprimées. De plus, la propriété id
de BrowserView
a également été supprimée.
Pour des informations plus détaillées, voir #23578.
Changements majeurs prévus de l'API (10.0)
Déprécié : l'argument companyName
de crashReporter.start()
L'argument companyName
de crashReporter.start()
, qui était auparavant requis, est maintenant optionnel et de plus déprécié. Pour obtenir le même comportement de manière non dépréciée, vous pouvez passer une valeur companyName
dans globalExtra
.
// Déprécié dans Electron 10
crashReporter.start({ companyName: 'Umbrella Corporation' })
// Remplacé par
crashReporter.start({ globalExtra: { _companyName: 'Umbrella Corporation' }})
Déprécié : crashReporter.getCrashesDirectory()
La méthode crashReporter.getCrashesDirectory
a été dépréciée. Usage Devrait être remplacé par app.getPath('crashDumps')
.
// Déprécié dans Electron 10
crashReporter.getCrashesDirectory()
// Remplacé par
app.getPath('crashDumps')
Déprécié : méthodes crashReporter
dans le processus de rendu
L'appel des méthodes crashReporter
suivantes à partir du processus de rendu est déprécié :
crashReporter.start
crashReporter.getLastCrashReport
crashReporter.getUploadedReports
crashReporter.getUploadToServer
crashReporter.setUploadToServer
crashReporter.getCrashesDirectory
Les seules méthodes non obsolètes restantes dans le module crashReporter
du renderer sont addExtraParameter
, removeExtraParameter
et getParameters
.
Toutes les méthodes ci-dessus restent non dépréciées lorsqu'elles sont appelées à partir du processus principal.
Voir #23265 pour plus de détails.
Déprécié : crashReporter.start({ compress: false })
La configuration { compress: false }
dans crashReporter.start
est obsolète. Presque tous les serveurs d'ingestion de plantages supportent la compression gzip. Cette option sera supprimée dans une future version d’Electron.
Valeur par défaut modifié : enableRemoteModule
est par défaut à false
Dans Electron 9, l'utilisation du module remote sans l'activer explicitement via l'option enableRemoteModule
de WebPreferences émet dès maintenant un avertissement. Avec Electron 10, le module remote est dès maintenant désactivé par défaut. Pour utiliser le module remote, on doit spécifier enableRemoteModule : true
dans les WebPreferences:
const w = new BrowserWindow({
webPreferences: {
enableRemoteModule: true
}
})
We recommend moving away from the remote module.
protocol.unregisterProtocol
protocol.uninterceptProtocol
Les API sont désormais synchrones et le rappel facultatif n'est plus nécessaire.
// Déprécié
protocol.unregisterProtocol(scheme, () => { /* ... */ })
// Remplacer par
protocol.unregisterProtocol(scheme)
protocol.registerFileProtocol
protocol.registerBufferProtocol
protocol.registerStringProtocol
protocol.registerHttpProtocol
protocol.registerStreamProtocol
protocol.interceptFileProtocol
protocol.interceptStringProtocol
protocol.interceptBufferProtocol
protocol.interceptHttpProtocol
protocol.interceptStreamProtocol
Les API sont désormais synchrones et le rappel facultatif n'est plus nécessaire.
// Déprécié
protocol.registerFileProtocol(scheme, handler, () => { /* ... */ })
// Remplacer par
protocol.registerFileProtocol(scheme, handler)
Le protocole enregistré ou intercepté n'a pas d'effet sur la page en cours jusqu'à ce que la navigation se produise.
protocol.isProtocolHandled
Cette API est dépréciée et les utilisateurs doivent utiliser protocol.isProtocolRegistered
et protocol.isProtocolIntercepted
à la place.
// Déprécié
protocol.isProtocolHandled(scheme).then(() => { /* ... */ })
// Remplacer par
const isRegistered = protocol.isProtocolRegistered(scheme)
const isIntercepted = protocol.isProtocolIntercepted(scheme)
Changements API non rétro-compatibles prévus (9.0)
Fonctionnement par défaut modifié : le chargement des modules natifs non contextuels dans le processus de rendu est désactivé par défaut
À partir d’Electron 9, nous n’autorisons plus le chargement de modules natifs insensibles au contexte dans le processus de rendu. Ceci est pour améliorer la sécurité, les performances et la maintenabilité d'Electron en tant que projet.
Si cela vous affecte, vous pouvez définir temporairement app.allowRendererProcessReuse
pour faux
pour revenir à l’ancien comportement. Ce drapeau ne sera une option que jusqu'à Electron 11 donc vous devriez planifier de mettre à jour vos modules natifs pour être sensible au contexte.
Pour des informations plus détaillées, voir #18397.
Déprécié : API d'extension BrowserWindow
Les API d'extension suivantes sont obsolètes :
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
Utilisez plutôt les API de session :
chemin ses.loadExtension(path)
ses.removeExtension(extension_id)
ses.getAllExtensions()
// Déprécié dans Electron 9
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
// Remplacer par
session.defaultSession.loadExtension(path)
// Déprécié dans Electron 9
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
// Remplacer par
session.defaultSession.removeExtension(extension_id)
// Déprécié dans Electron 9
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
// Remplacé par
session.defaultSession.getAllExtensions()
Supprimé: <webview>.getWebContents()
Cette API, qui a été dépréciée dans Electron 8.0, est désormais supprimée.
// Supprimé dans Electron 9.0
webview.getWebContents()
// Remplacé par
const { remote } = require('electron')
remote.webContents.fromId(webview.getWebContentsId())
Supprimé : webFrame.setLayoutZoomLevelLimits()
Chrome a supprimé la prise en charge pour modifier les limites de niveau de zoom de mise en page et il n'est plus possible pour Electron de le maintenir. La fonction a été dépréciée dans Electron 8.x, et supprimée dans Electron 9.x. Les limites de niveau de zoom de mise en page sont maintenant fixées à un minimum de 0. 5 et un maximum de 5.0, tel que défini ici.
Comportement modifié : l’envoi d’objets non-JS au travers d' IPC déclenche maintenant une exception
Dans Electron 8.0, l'IPC a été modifié pour utiliser l'algorithme Structured Clone , apportant des améliorations significatives des performances. Pour aider à faciliter la transition, l'ancien algorithme de sérialisation IPC a été conservé et utilisé pour certains objets qui ne sont pas sérialisables avec Structured Clone. En particulier, les objets DOM (ex: Element
, Location
et DOMMatrix
), Node.js supportés par des classes C++ (ex: process.env
, certains membres de Stream
), et Electron supportés par des classes C++ (ex: WebContents
, BrowserWindow
et WebFrame
) ne sont pas sérialisables avec Structured Clone. Chaque fois que l'ancien algorithme était invoqué, un un avertissement de dépréciation a été imprimé.
Dans la version 9.0 d'Electron, l'ancien algorithme de sérialisation a été supprimé, et l'envoi de tels objets non sérialisables lèvera dorénavant une erreur "object could not be cloned".
API modifiée : shell.openItem
est désormais shell.openPath
L'API shell.openItem
a été remplacée par une API shell.openPath
asynchrone. Vous pouvez voir la proposition initiale de l'API et le raisonnement ici.
Changements API non rétro-compatibles prévus (8.0)
Comportement modifié : les valeurs envoyées par IPC sont maintenant sérialisées avec l'algorithme de clonage structuré
The algorithm used to serialize objects sent over IPC (through ipcRenderer.send
, ipcRenderer.sendSync
, WebContents.send
and related methods) has been switched from a custom algorithm to V8's built-in Structured Clone Algorithm, the same algorithm used to serialize messages for postMessage
. This brings about a 2x performance improvement for large messages, but also brings some breaking changes in behavior.
- L'envoi de Functions, Promises, WeakMaps, WeakSets, ou des objets contenant de telles valeurs au travers d'IPC vont désormais lever une exception, au lieu de convertir silencieusement les valeurs pour
undefined
.
// Précédemment:
ipcRenderer.send('channel', { value: 3, someFunction: () => {} })
// => résulte par l'arrivée de { value: 3 } dans le processus principal
// Depuis Electron 8:
ipcRenderer.send('channel', { value: 3, someFunction: () => {} })
// => lève l'exception Error("() => {} could not be cloned.")
NaN
,Infinity
et-Infinity
seront désormais correctement sérialisés à la place d'être converti ennull
.- Les objets contenant des références cycliques seront désormais correctement sérialisés, au lieu d'être converti en
null
. - Les valeurs
Set
,Map
,Error
etRegExp
seront correctement sérialisées, au lieu d'être converti en{}
. - Les valeurs
BigInt
seront correctement sérialisées, au lieu d'être converties ennull
. - Les tableaux clairemés seront sérialisés en tant que tels, au lieu d'être convertis en tableaux denses avec une valeur
null
. - Les objets
Date
seront transférés en tant qu'objetsDate
, au lieu d'être convertis en leur représentation en chaîne ISO. - Les tableaux typés (tels que
Uint8Array
,Uint16Array
,Uint32Array
et ainsi de suite) seront transférés en tant que tels, au lieu d'être convertis enBuffer
Node.js. - Les objets
Buffer
Node.js seront transférés en tant queUint8Array
s. Vous pouvez convertir unUint8Array
enBuffer
Node.js en encapsulant l'ArrayBuffer
sous-jacent :
Buffer.from(value.buffer, value.byteOffset, value.byteLength)
L'envoi d'objets qui ne sont pas de type natif JS, comme les objets DOM (ex: Element
, Location
, DOMMatrix
), Node.js (ex: process.env
, Stream
), ou Electron (ex: WebContents
, BrowserWindow
, WebFrame
) est déprécié. Dans Electron 8, ces objets seront sérialisés comme auparavant avec un message de type DeprecationWarning mais à partir d'Electron 9, envoyer ces types d'objets lèvera une erreur 'could not be cloned'.
Déprécié : <webview>.getWebContents()
Cette API est implémentée à l'aide du module remote
, qui a à la fois des performances et les implications en matière de sécurité. Par conséquent, son utilisation doit être explicite.
// Déprécié
webview.getWebContents()
// Remplacé par
const { remote } = require('electron')
remote.webContents.fromId(webview.getWebContentsId())
Cependant, il est recommandé d'éviter complètement d'utiliser le module distant
.
// main
const { ipcMain, webContents } = require('electron')
const getGuestForWebContents = (webContentsId, contents) => {
const guest = webContents. romId(webContentsId)
si (! uest) {
throw new Error(`Invalid webContentsId: ${webContentsId}`)
}
if (invité. ostWebContents ! = contents) {
throw new Error('Accès refusé à webContents')
}
return guest
}
ipcMain. handle('openDevTools', (event, webContentsId) => {
const guest = getGuestForWebContents(webContentsId, event.sender)
invité. penDevTools()
})
// moteur de rendu
const { ipcRenderer } = require('electron')
ipcRenderer.invoke('openDevTools', webview.getWebContentsId())
Déprécié : webFrame.setLayoutZoomLevelLimits()
Chrome a supprimé la prise en charge pour modifier les limites de niveau de zoom de mise en page et il n'est plus possible pour Electron de le maintenir. La fonction émettra un avertissement dans Electron 8.x, et cessent d'exister dans Electron 9.x. Les limites de niveau de zoom de mise en page sont maintenant fixées à un minimum de 0.25 et un maximum de 5.0, tel que défini ici.
Événements obsolètes dans systemPreferences
Les événements systemPreferences
suivants ont été dépréciés :
inverted-color-scheme-changed
high-contrast-color-scheme-changed
Utilisez à la place le nouvel événement updated
du module nativeTheme
.
// Deprécié
systemPreferences.on('inverted-color-scheme-changed', () => { /* ... */ })
systemPreferences.on('high-contrast-color-scheme-changed', () => { /* ... */ })
// Replacer avec
nativmeTheme.on('updated', () => { /* ... */ })
Méthodes obsolètes dans systemPreferences
Les méthodes suivantes de systemPreferences
ont été dépréciées :
systemPreferences.isDarkMode()
systemPreferences.isInvertedColorScheme()
systemPreferences.isHighContrastColorScheme()
Veuillez utiliser à la place les propriétés de nativeTheme
suivantes :
nativeTheme.shouldUseDarkColors
nativeTheme.shouldUseInvertedColorScheme
nativeTheme.shouldUseHighContrastColors
// Depreciée
systemPreferences.isDarkMode()
// Remplacer par
nativeTheme.shouldUseDarkColors
// Depreciée
systemPreferences.isInvertedColorScheme()
// Remplacer par
nativeTheme.shouldUseInvertedColorScheme
// Depreciée
systemPreferences.isHighContrastColorScheme()
// Remplacer par
nativeTheme.shouldUseHighContrastColors
Changements majeurs prévus de l'API (7.0)
Déprécié: en-tête d'URL Node Atom.io
Il s’agit de l’URL spécifiée comme disturl
dans un fichier .npmrc
ou le flag --dist-url
en ligne de commande lors de la compilation des modules natifs de Node. Les deux seront pris en charge dans un futur proche, mais il est recommandé de suivre le remplacement.
Déprécié : https://atom.io/download/electron
Remplacer par : https://electronjs.org/headers
API modifiée : session.clearAuthCache()
n'accepte plus les options
L'API session.clearAuthCache
n'accepte plus les options pour ce qu'il faut effacer, mais supprime l'ensemble du cache sans conditions.
// Déprécié
session.clearAuthCache({ type: 'password' })
// Remplacer par
session.clearAuthCache()
API modifiée : powerMonitor.querySystemIdleState
est désormais powerMonitor.getSystemIdleState
// Supprimé dans Electron 7.0
powerMonitor.querySystemIdleState(threshold, callback)
// Remplacer par l'API synchrone
const idleState = powerMonitor.getSystemIdleState(threshold)
API modifiée : powerMonitor.querySystemIdleTime
est désormais powerMonitor.getSystemIdleTime
// Supprimé dans Electron 7.0
powerMonitor.querySystemIdleTime(callback)
// Remplacer par l'API synchrone
const idleTime = powerMonitor.getSystemIdleTime()
API modifiée : webFrame.setIsolatedWorldInfo
remplace plusieurs méthodes
// Supprimé dans Electron 7.0
webFrame.setIsolatedWorldContentSecurityPolicy(worldId, csp)
webFrame.setIsolatedWorldHumanReadableName(worldId, name)
webFrame.setIsolatedWorldSecurityOrigin(worldId, securityOrigin)
// Remplacer par
webFrame.setIsolatedWorldInfo(
worldId,
{
securityOrigin: 'some_origin',
name: 'human_readable_name',
csp: 'content_security_policy'
})
Supprimé: propriété marked
dans getBlinkMemoryInfo
Cette propriété a été supprimée dans Chromium 77 et n'est donc plus disponible.
Comportement modifié : l'attribut webkitdirectory
de <input type="file"/>
liste maintenant le contenu du répertoire
L'attribut webkitdirectory
sur les noeuds HTML "input" de type "file" leur permet de sélectionner des dossiers. Dans les versions précédentes d'Electron l'implémentation était incorrecte et la propriété event.target.files
de l'input retournait une FileList
qui retournait un objet File
correspondant au dossier sélectionné.
Depuis Electron 7, FileList
est maintenant la liste de tous les fichiers contenus dans le dossier, de la même manière que Chrome, Firefox, et Edge (lien vers la documentation MDN).
En guise d'illustration, considérez un dossier avec cette structure :
dossier
├── fichier1
├── fichier2
└── fichier3
Dans Electron < 6, cela renverrait une FileList
avec un objetFile
pour :
chemin/vers/dossier
Dans Electron 7, cela renvoie maintenant une FileList
avec un objetFile
pour :
/chemin/vers/dossier/fichier3
/chemin/vers/dossier/fichier2
/chemin/vers/dossier/fichier1
Notez que webkitdirectory
n'expose plus le chemin vers le dossier sélectionné. If you require the path to the selected folder rather than the folder contents, see the dialog.showOpenDialog
API (link).
API modifiée : versions basées sur les promise des API basées sur les callback
Electron 5 et Electron 6 ont introduit des versions des API asynchrones existantes basées sur les promise et déprécié leurs homologues basées sur les callback. Dans Electron 7, toutes les APIs obsolètes basées sur les callback sont maintenant supprimées.
Les fonctions suivantes ne retournent plus que des promesses :
app.getFileIcon()
#15742app.dock.show()
#16904contentTracing.getCategories()
#16583contentTracing.getTraceBufferUsage()
#16600contentTracing.startRecording()
#16584contentTracing.stopRecording()
#16584contents.executeJavaScript()
#17312cookies.flushStore()
#16464cookies.get()
#16464cookies.remove()
#16464cookies.set()
#16464debugger.sendCommand()
#16861dialog.showCertificateTrustDialog()
#17181inAppPurchase.getProducts()
#17355inAppPurchase.purchaseProduct()
#17355netLog.stopLogging()
#16862session.clearAuthCache()
#17259session.clearCache()
#17185session.clearHostResolverCache()
#17229session.clearStorageData()
#17249session.getBlobData()
#17303session.getCacheSize()
#17185session.resolveProxy()
#17222session.setProxy()
#17222shell.openExternal()
#16176()
#15855()
#15855webContents.hasServiceWorker()
#16535webContents.printToPDF()
#16795webContents.savePage()
#16742webFrame.executeJavaScript()
#17312webFrame.executeJavaScriptInIsolatedWorld()
#17312webviewTag.executeJavaScript()
#17312win.capturePage()
#15743
Ces fonctions ont maintenant deux formes, synchrone et asynchrone basées sur Promise :
dialog.showMessageBox()
/dialog.showMessageBoxSync()
#17298dialog.showOpenDialog()
/dialog.showOpenDialogSync()
#16973dialog.showSaveDialog()
/dialog.showSaveDialogSync()
#17054
Changements API non rétro-compatible prévus (6.0)
API modifiée : win.setMenu(null)
est désormais win.removeMenu()
// Déprécié
win.setMenu(null)
// Remplacé par
win.removeMenu()
API modifiée : electron.screen
dans le processus de rendu doit être accédé via remote
// Déprécié
require('electron').screen
// Remplacé par
require('electron').remote.screen
API modifiée : Le require()
d'un builtin node dans un moteur de rendu contenu dans un bac à sable ne charge plus implicitement la version remote
// Déprécié
require('child_process')
// Remplacer par
require('electron').remote.require('child_process')
// Déprécié
require('fs')
// Remplacer par
require('electron').remote.require('fs')
// Déprécié
require('os')
// Remplacer par
require('electron').remote.require('os')
// Déprécié
require('path')
// Remplacer par
require('electron').remote.require('path')
Déprécié : powerMonitor.querySystemIdleState
remplacé par powerMonitor.getSystemIdleState
// Déprécié
powerMonitor.querySystemIdleState(threshold, callback)
// Remplacer par l'API synchrone
const idleState = powerMonitor.getSystemIdleState(threshold)
Déprécié : powerMonitor.querySystemIdleTime
remplacé par powerMonitor.getSystemIdleTime
// Déprécié
powerMonitor.querySystemIdleTime(callback)
// Remplacer par l'API synchrone
const idleTime = powerMonitor.getSystemIdleTime()
Déprécié : app.enableMixedSandbox()
n'est plus nécessaire
// Déprécié
app.enableMixedSandbox()
Le mode bac à sable mixte est désormais activé par défaut.
Déprécié : Tray.setHighlightMode
Sous macOS Catalina, notre ancienne implémentation de Tray est interrompue. Le substitut natif d'Apple ne prend pas en charge la modification du comportement de mise en évidence.
// Déprécié
tray.setHighlightMode(mode)
// L'API sera supprimée dans la v7.0 sans remplacement.
Changements majeurs prévus de l'API (5.0)
Valeur par défaut modifiée : nodeIntegration
et webviewTag
sont par défaut à false, contextIsolation
est par défaut à true
Les options suivantes de webPreferences
seront dépréciées en faveur de nouvelles valeurs par défaut listées ci-dessous.
Propriétés | Valeur par défaut dépréciée | Nouvelle valeur par défaut |
---|---|---|
contextIsolation | false | true |
nodeIntegration | true | false |
webviewTag | nodeIntegration si mis sinon true | false |
Exemple : Réactiver le webviewTag
const w = new BrowserWindow({
webPreferences: {
webviewTag: true
}
})
Comportement modifié : nodeIntegration
dans les fenêtres enfants ouvertes via nativeWindowOpen
Les fenêtres enfants ouvertes avec l'option nativeWindowOpen
auront toujours Node.js integration désactivée, sauf si nodeIntegrationInSubFrames
est à true
.
API modifiée : l'enregistrement de schémas privilégiés doit maintenant être effectué avant que l'application ne soit prête
Les API du processus de rendu webFrame.registerURLSchemeAsPrivileged
et webFrame.registerURLSchemeAsBypassingCSP
ainsi que l'API du processus de navigateur protocol.registerStandardSchemes
ont été supprimés. Une nouvelle API, protocol.registerSchemesAsPrivileged
a été ajoutée et devrait être utilisée pour enregistrer des schémas personnalisés avec les privilèges requis. Les schémas personnalisés doivent être enregistrés avant que l'application soit prête.
Déprécié : webFrame.setIsolatedWorld*
remplacé par webFrame.setIsolatedWorldInfo
// Déprécié
webFrame.setIsolatedWorldContentSecurityPolicy(worldId, csp)
webFrame.setIsolatedWorldHumanReadableName(worldId, name)
webFrame.setIsolatedWorldSecurityOrigin(worldId, securityOrigin)
// Remplacer par
webFrame.setIsolatedWorldInfo(
worldId,
{
securityOrigin: 'some_origin',
name: 'human_readable_name',
csp: 'content_security_policy'
})
API modifiée : webFrame.setSpellCheckProvider
prend désormais un rappel asynchrone
Le rappel spellCheck
est désormais asynchrone et le paramètre autoCorrectWord
a été supprimé.
// Déprécié
webFrame.setSpellCheckProvider('en-US', true, {
spellCheck: (text) => {
return !spellchecker.isMisspelled(text)
}
})
// Remplacer par
webFrame.setSpellCheckProvider('en-US', {
spellCheck: (words, callback) => {
callback(words.filter(text => spellchecker.isMisspelled(text)))
}
})
API modifiée : webContents.getZoomLevel
et webContents.getZoomFactor
sont désormais synchrones
webContents.getZoomLevel
et webContents.getZoomFactor
n'ont plus de callback en paramètre et retournent directement leurs valeur numérique.
// Déprécié:
webContents.getZoomLevel((level) => {
console.log(level)
})
// Remplacer par
const level = webContents.getZoomLevel()
console.log(level)
// Déprécié:
webContents.getZoomLevel((level) => {
console.log(factor)
})
// Remplacer par
const level = webContents.getZoomLevel()
console.log(factor)
Changements majeurs prévus de l'API (4.0)
La liste suivante inclut les modifications de rupture de l'API apportées dans Electron 4.0.
app.makeSingleInstance
// Déprécié
app.makeSingleInstance((argv, cwd) => {
/* ... */
})
// Remplacer par
app.requestSingleInstanceLock()
app.on('second-instance', (event, argv, cwd) => {
/* ... */
})
app.releaseSingleInstance
// Déprécié
app.releaseSingleInstance()
// Remplacé par
app.releaseSingleInstanceLock()
app.getGPUInfo
app.getGPUInfo('complete')
// Now behaves the same with `basic` on macOS
app.getGPUInfo('basic')
win_delay_load_hook
Quand vous compilez des modules natifs sous Windows, la variable win_delay_load_hook
dans le fichier binding.gyp
doit être mise à vrai (qui l'est par défaut). Si cet accroche n'est pas présente, l'exécution du module natif échouera sur Windows, avec un message d'erreur comme Cannot find module
. See the native module guide for more.
Suppression : support IA32 Linux
Electron 18 ne fonctionnera plus sur les systèmes Linux 32 bits. Consultez déprécation du support pour Linux 32 bits pour plus d'informations.
Changements majeurs prévus de l'API (3.0)
La liste suivante inclut les changements majeurs pour Electron 3.0.
app
// Deprecated
app.getAppMemoryInfo()
// Replace with
app.getAppMetrics()
// Deprecated
const metrics = app.getAppMetrics()
const { memory } = metrics[0] // Deprecated property
BrowserWindow
// Déprécié
const optionsA = { webPreferences: { blinkFeatures: '' } }
const windowA = new BrowserWindow(optionsA)
// Remplacer par
const optionsB = { webPreferences: { enableBlinkFeatures: '' } }
const windowB = new BrowserWindow(optionsB)
// Déprécié
window.on('app-command', (e, cmd) => {
if (cmd === 'media-play_pause') {
// fait quelque chose
}
})
// Remplacer par
window.on('app-command', (e, cmd) => {
if (cmd === 'media-play-pause') {
// fait quelque chose
}
})
presse-papiers
// Déprécié
clipboard.readRtf()
// Remplacé par
clipboard.readRTF()
// Déprécié
clipboard.writeRtf()
// Remplacé par
clipboard.writeRTF()
// Déprécié
clipboard.readHtml()
// Remplacé par
clipboard.readHTML()
// Déprécié
clipboard.writeHtml()
// Remplacé par
clipboard.writeHTML()
crashReporter
// Déprécié
crashReporter.start({
companyName: 'Crashly',
submitURL: 'https://crash.server.com',
autoSubmit: true
})
// Remplacé par
crashReporter.start({
companyName: 'Crashly',
submitURL: 'https://crash.server.com',
uploadToServer: true
})
nativeImage
// Déprécié
nativeImage.createFromBuffer(buffer, 1.0)
// Remplacé par
nativeImage.createFromBuffer(buffer, {
scaleFactor: 1.0
})
processus (process)
// Déprécié
const info = process.getProcessMemoryInfo()
screen
// Déprécié
screen.getMenuBarHeight()
// Remplacé par
screen.getPrimaryDisplay().workArea
session
// Déprécié
ses.setCertificateVerifyProc((hostname, certificate, callback) => {
callback(true)
})
// Remplacer par
ses.setCertificateVerifyProc((request, callback) => {
callback(0)
})
Tray
// Déprécié
tray.setHighlightMode(true)
// Remplacé par
tray.setHighlightMode('on')
// Déprécié
tray.setHighlightMode(false)
// Remplacé par
tray.setHighlightMode('off')
webContents
// Déprécié
webContents.openDevTools({ detach: true })
// Remplacé par
webContents.openDevTools({ mode: 'detach' })
// Supprimé
webContents.setSize(options)
// Il n'y a pas de remplacement prévu
webFrame
// Déprécié
webFrame.registerURLSchemeAsSecure('app')
// Remplacé par
protocol.registerStandardSchemes(['app'], { secure: true })
// Déprécié
webFrame.registerURLSchemeAsPrivileged('app', { secure: true })
// Remplacé par
protocol.registerStandardSchemes(['app'], { secure: true })
<webview>
// Supprimé
webview.setAttribute('disableguestresize', '')
// There is no replacement for this API
// Supprimé
webview.setAttribute('guestinstance', instanceId)
// There is no replacement for this API
// Les écouteurs d'événements ne marchent plus sur les tags webview
webview.onkeydown = () => { /* handler */ }
webview.onkeyup = () => { /* handler */ }
Node Headers URL
Il s’agit de l’URL spécifiée comme disturl
dans un fichier .npmrc
ou le flag --dist-url
en ligne de commande lors de la compilation des modules natifs de Node.
Déprécié : https://atom.io/download/atom-shell
Remplacé par : https://atom.io/download/electron
Changements majeurs prévus de l'API (2.0)
La liste suivant inclut les changements majeurs faits dans Electron 2.0.
BrowserWindow
// Déprécié
const optionsA = { titleBarStyle: 'hidden-inset' }
const windowA = new BrowserWindow(optionsA)
// Remplacer par
const optionsB = { titleBarStyle: 'hiddenInset' }
const windowB = new BrowserWindow(optionsB)
menu
// Supprimé
menu.popup(browserWindow, 100, 200, 2)
// Remplacé par
menu.popup(browserWindow, { x: 100, y: 200, positioningItem: 2 })
nativeImage
// Supprimé
nativeImage.toPng()
// Remplacé par
nativeImage.toPNG()
// Supprimé
nativeImage.toJpeg()
// Remplacé par
nativeImage.toJPEG()
processus (process)
process.versions.electron
etprocess.version.chrome
seront mis en lecture seule par souci de cohérence avec la propriétéprocess.versions
définie par Node.
webContents
// Supprimé
webContents.setZoomLevelLimits(1, 2)
// Remplacé par
webContents.setVisualZoomLevelLimits(1, 2)
webFrame
// Supprimé
webFrame.setZoomLevelLimits(1, 2)
// Remplacé par
webFrame.setVisualZoomLevelLimits(1, 2)
<webview>
// Supprimé
webview.setZoomLevelLimits(1, 2)
// Remplacé par
webview.setVisualZoomLevelLimits(1, 2)
Versions ARM dupliquées
Chaque version d'Electron contient deux versions ARM identiques avec des noms légèrement différents, comme electron-v1.7.3-linux-arm.zip
et electron-v1.7.3-linux-armv7l.zip
. Celui avec le préfixe v7l
a été ajouté pour clarifier aux utilisateurs quelle version ARM elle supporte, et supprimer les ambiguïtés des prochains paquets armv6l et arm64 qui pourraient être produites.
Le fichier sans le préfixe est toujours publié afin d'éviter de casser les installations qui pourraient l'utiliser. À partir de la 2.0, le fichier sans préfixe ne sera plus publié.