- 重大更改
- FIXME 注释
- 计划重写的 API (7.0)
- shell.openExternalSync(url[, options])
- 计划重写的 API (6.0)
- win.setMenu(null)
- contentTracing.getTraceBufferUsage()
- 渲染进程中的 electron.screen
- 沙盒渲染器中的require
- powerMonitor.querySystemIdleState
- powerMonitor.querySystemIdleTime
- Tray
- 计划重写的 API (5.0)
- new BrowserWindow({ webPreferences })
- nativeWindowOpen
- 带权限的 Scheme 注册
- webFrame Isolated World APIs
- new BrowserWindow({ webPreferences })
- 计划重写的 API (4.0)
- app.makeSingleInstance
- app.releaseSingleInstance
- app.getGPUInfo
- win_delay_load_hook
- 重大的API更新 (3.0)
- app
- BrowserWindow
- clipboard
- crashReporter
- nativeImage
- process
- screen
- session
- Tray
- webContents
- webFrame
- <webview>
- Node Headers URL
- 重大的API更新 (2.0)
- BrowserWindow
- menu
- nativeImage
- process
- webContents
- webFrame
- <webview>
- 重复的 ARM 资源
重大更改
这里将记录重大更改,并在可能的情况下向JS代码添加弃用警告,在这更改之前至少会有一个重要版本.
FIXME 注释
代码注释中添加的FIXME字符来表示以后的版本应该被修复的问题. 参考 https://github.com/electron/electron/search?q=fixme
计划重写的 API (7.0)
shell.openExternalSync(url[, options])
// Deprecatedshell.openExternalSync(url)// Replace withasync function openThing (url) {await shell.openExternal(url)}
计划重写的 API (6.0)
win.setMenu(null)
// 不推荐win.setMenu(null)// 替换为win.removeMenu()
contentTracing.getTraceBufferUsage()
// DeprecatedcontentTracing.getTraceBufferUsage((percentage, value) => {// do something})// Replace withcontentTracing.getTraceBufferUsage().then(infoObject => {// infoObject has percentage and value fields})
渲染进程中的 electron.screen
// 不推荐require('electron').screen// 替换为require('electron').remote.screen
沙盒渲染器中的require
// 不推荐require('child_process')// 替换为require('electron').remote.require('child_process')// 不推荐require('fs')// 替换为require('electron').remote.require('fs')// 不推荐require('os')// 替换为require('electron').remote.require('os')// 不推荐require('path')// 替换为require('electron').remote.require('path')
powerMonitor.querySystemIdleState
// DeprecatedpowerMonitor.querySystemIdleState(threshold, callback)// Replace with synchronous APIconst idleState = getSystemIdleState(threshold)
powerMonitor.querySystemIdleTime
// DeprecatedpowerMonitor.querySystemIdleTime(callback)// Replace with synchronous APIconst idleTime = getSystemIdleTime()
Tray
Under macOS Catalina our former Tray implementation breaks. Apple's native substitute doesn't support changing the highlighting behavior.
// Deprecatedtray.setHighlightMode(mode)// API will be removed in v7.0 without replacement.
计划重写的 API (5.0)
new BrowserWindow({ webPreferences })
不推荐使用以下 webPreferences 选项默认值,以支持下面列出的新默认值。
| 属性 | 不推荐使用的默认值 | 新的默认值 |
|---|---|---|
contextIsolation | false | true |
nodeIntegration | true | false |
webviewTag | nodeIntegration 未设置过则是 true | false |
例如,重新启用 webviewTag
const w = new BrowserWindow({webPreferences: {webviewTag: true}})
nativeWindowOpen
Child windows opened with the nativeWindowOpen option will always have Node.js integration disabled, unless nodeIntegrationInSubFrames is `true.
带权限的 Scheme 注册
移除 Renderer process APIs webFrame.setLSSemeAsPrivieged 和 webFrame.registerURLLSQUIseAswersegCSP 以及浏览器 process API protocol.registerStardsSchemes. 新的 API protocol.registerSchemeasviliged 已被添加,并用于注册具有必要权限的自定义 scheme。 自定义 scheme 需要在 app 触发 ready 事件之前注册。
webFrame Isolated World APIs
// 弃用webFrame.setIsolatedWorldContentSecurityPolicy(worldId, csp)webFrame.setIsolatedWorldHumanReadableName(worldId, name)webFrame.setIsolatedWorldSecurityOrigin(worldId, securityOrigin)// 替换为webFrame.setIsolatedWorldInfo(worldId,{securityOrigin: 'some_origin',name: 'human_readable_name',csp: 'content_security_policy'})
计划重写的 API (4.0)
以下包含了Electron 4.0中重大的API更新
app.makeSingleInstance
// 弃用app.makeSingleInstance((argv, cwd) => {/* ... */})// 替换为app.requestSingleInstanceLock()app.on('second-instance', (event, argv, cwd) => {/* ... */})
app.releaseSingleInstance
// 废弃app.releaseSingleInstance()// 替换为app.releaseSingleInstanceLock()
app.getGPUInfo
app.getGPUInfo('complete')// 现在的行为将与macOS下的`basic`设置一样app.getGPUInfo('basic')
win_delay_load_hook
在为 Windows 构建本机模块时,将使 win_delay_load_hook 变量值 位于 binding.gyp 模块,必须为 true (这是默认值)。 如果这个钩子 不存在,那么本机模块将无法在 Windows 上加载,并出现错误 消息如 无法找到模块。 查看 原生模块指南 以获取更多信息.
重大的API更新 (3.0)
以下包含了Electron 3.0中重大的API更新
app
// 弃用app.getAppMemoryInfo()// 替换为app.getAppMetrics()// 弃用const metrics = app.getAppMetrics()const { memory } = metrics[0] // 弃用的属性
BrowserWindow
// 弃用let optionsA = { webPreferences: { blinkFeatures: '' } }let windowA = new BrowserWindow(optionsA)// 替换为let optionsB = { webPreferences: { enableBlinkFeatures: '' } }let windowB = new BrowserWindow(optionsB)// 弃用window.on('app-command', (e, cmd) => {if (cmd === 'media-play_pause') {// do something}})// 替换为window.on('app-command', (e, cmd) => {if (cmd === 'media-play-pause') {// do something}})
clipboard
// 过时的clipboard.readRtf()// 替换为clipboard.readRTF()// 过时的clipboard.writeRtf()// 替换为clipboard.writeRTF()// 过时的clipboard.readHtml()// 替换为clipboard.readHTML()// 过时的clipboard.writeHtml()//替换为clipboard.writeHTML()
crashReporter
// 过时的crashReporter.start({companyName: 'Crashly',submitURL: 'https://crash.server.com',autoSubmit: true})// 替换为crashReporter.start({companyName: 'Crashly',submitURL: 'https://crash.server.com',uploadToServer: true})
nativeImage
// 弃用nativeImage.createFromBuffer(buffer, 1.0)// 替换为nativeImage.createFromBuffer(buffer, {scaleFactor: 1.0})
process
// 弃用const info = process.getProcessMemoryInfo()
screen
// 弃用screen.getMenuBarHeight()// 替换为screen.getPrimaryDisplay().workArea
session
// 弃用ses.setCertificateVerifyProc((hostname, certificate, callback) => {callback(true)})// 替换为ses.setCertificateVerifyProc((request, callback) => {callback(0)})
Tray
// 过时的tray.setHighlightMode(true)// 替换为tray.setHighlightMode('on')// 过时的tray.setHighlightMode(false)// 替换为tray.setHighlightMode('off')
webContents
// 弃用webContents.openDevTools({ detach: true })// 替换为webContents.openDevTools({ mode: 'detach' })// 移除webContents.setSize(options)// 没有该API的替代
webFrame
// 弃用webFrame.registerURLSchemeAsSecure('app')// 替换为protocol.registerStandardSchemes(['app'], { secure: true })// 弃用webFrame.registerURLSchemeAsPrivileged('app', { secure: true })// 替换为protocol.registerStandardSchemes(['app'], { secure: true })
<webview>
// 移除webview.setAttribute('disableguestresize', '')// 没有该API的替代// 移除webview.setAttribute('guestinstance', instanceId)// 没有该API的替代// 键盘监听器在webview标签中不再起效webview.onkeydown = () => { /* handler */ }webview.onkeyup = () => { /* handler */ }
Node Headers URL
这是在构建原生 node 模块时在 .npmrc 文件中指定为 disturl 的 url 或是 —dist-url 命令行标志.
过时的: https://atom.io/download/atom-shell
替换为: https://atom.io/download/electron
重大的API更新 (2.0)
以下包含了Electron 2.0中重大的API更新
BrowserWindow
// 弃用let optionsA = { titleBarStyle: 'hidden-inset' }let windowA = new BrowserWindow(optionsA)// 替换为let optionsB = { titleBarStyle: 'hiddenInset' }let windowB = new BrowserWindow(optionsB)
menu
// 移除menu.popup(browserWindow, 100, 200, 2)// 替换为menu.popup(browserWindow, { x: 100, y: 200, positioningItem: 2 })
nativeImage
// 移除nativeImage.toPng()// 替换为nativeImage.toPNG()// 移除nativeImage.toJpeg()// 替换为nativeImage.toJPEG()
process
process.versions.electron和process.version.chrome将成为只读属性, 以便与其他process.versions属性由Node设置。
webContents
// 移除webContents.setZoomLevelLimits(1, 2)// 替换为webContents.setVisualZoomLevelLimits(1, 2)
webFrame
// 移除webFrame.setZoomLevelLimits(1, 2)// 替换为webFrame.setVisualZoomLevelLimits(1, 2)
<webview>
// 移除webview.setZoomLevelLimits(1, 2)// 替换为webview.setVisualZoomLevelLimits(1, 2)
重复的 ARM 资源
每个 Electron 发布版本包含两个相同的ARM版本,文件名略有不同,如electron-v1.7.3-linux-arm.zip 和 electron-v1.7.3-linux-armv7l.zip 添加包含v7l前缀的资源向用户明确其支持的ARM版本,并消除由未来armv6l 和 arm64 资源可能产生的歧义。
为了防止可能导致安装器毁坏的中断,不带前缀的文件仍然将被发布。 从2.0版本起,不带前缀的文件将不再发布。
更多详细情况,查看 6986 和 7189。
