API协议

这里将记录重大更改,并在可能的情况下向JS代码添加弃用警告,在这更改之前至少会有一个重要版本.

FIXME 注释

代码注释中添加的FIXME字符来表示以后的版本应该被修复的问题. 参考 https://github.com/electron/electron/search?q=fixme

计划重写的 API (5.0)

new BrowserWindow({ webPreferences })

不推荐使用以下 webPreferences 选项默认值,以支持下面列出的新默认值。

属性不推荐使用的默认值新的默认值
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagnodeIntegration 未设置过则是 truefalse

nativeWindowOpen

使用 nativeWindowOpen 选项打开的子窗口将始终禁用 Node.js 集成。

webContents.findInPage(text[, options])

wordStartmedialCapitalAsWordStart 选项被删除。

计划重写的 API (4.0)

以下列表包含了Electron4.0计划重写的API

app.makeSingleInstance

  1. // 废弃
  2. app.makeSingleInstance(function (argv, cwd) {
  3. })
  4. // 替换为
  5. app.requestSingleInstanceLock()
  6. app.on('second-instance', function (argv, cwd) {
  7. })

app.releaseSingleInstance

  1. // 废弃
  2. app.releaseSingleInstance()
  3. // 替换为
  4. app.releaseSingleInstanceLock()

app.getGPUInfo

  1. app.getGPUInfo('complete')
  2. // 现在的行为将与macOS下的`basic`设置一样
  3. app.getGPUInfo('basic')

win_delay_load_hook

在为 Windows 构建本机模块时,将使 win_delay_load_hook 变量值 位于 binding.gyp 模块,必须为 true (这是默认值)。 如果这个钩子 不存在,那么本机模块将无法在 Windows 上加载,并出现错误 消息如 无法找到模块。 查看 原生模块指南 以获取更多信息.

重大的API更新 (3.0)

以下包含了Electron 3.0中重大的API更新

app

  1. // 弃用
  2. app.getAppMemoryInfo()
  3. // 替换为
  4. app.getAppMetrics()
  5. // 弃用
  6. const metrics = app.getAppMetrics()
  7. const { memory } = metrics[0] // 弃用的属性

BrowserWindow

  1. // Deprecated
  2. let optionsA = { webPreferences: { blinkFeatures: '' } }
  3. let windowA = new BrowserWindow(optionsA)
  4. // Replace with
  5. let optionsB = { webPreferences: { enableBlinkFeatures: '' } }
  6. let windowB = new BrowserWindow(optionsB)
  7. // Deprecated
  8. window.on('app-command', (e, cmd) => {
  9. if (cmd === 'media-play_pause') {
  10. // do something
  11. }
  12. })
  13. // Replace with
  14. window.on('app-command', (e, cmd) => {
  15. if (cmd === 'media-play-pause') {
  16. // do something
  17. }
  18. })

clipboard

  1. // 过时的
  2. clipboard.readRtf()
  3. // 替换为
  4. clipboard.readRTF()
  5. // 过时的
  6. clipboard.writeRtf()
  7. // 替换为
  8. clipboard.writeRTF()
  9. // 过时的
  10. clipboard.readHtml()
  11. // 替换为
  12. clipboard.readHTML()
  13. // 过时的
  14. clipboard.writeHtml()
  15. //替换为
  16. clipboard.writeHTML()

crashReporter

  1. // 过时的
  2. crashReporter.start({
  3. companyName: 'Crashly',
  4. submitURL: 'https://crash.server.com',
  5. autoSubmit: true
  6. })
  7. // 替换为
  8. crashReporter.start({
  9. companyName: 'Crashly',
  10. submitURL: 'https://crash.server.com',
  11. uploadToServer: true
  12. })

nativeImage

  1. // 弃用
  2. nativeImage.createFromBuffer(buffer, 1.0)
  3. // 替换为
  4. nativeImage.createFromBuffer(buffer, {
  5. scaleFactor: 1.0
  6. })

process

  1. // Deprecated
  2. const info = process.getProcessMemoryInfo()

screen

  1. // 弃用
  2. screen.getMenuBarHeight()
  3. // 替换为
  4. screen.getPrimaryDisplay().workArea

session

  1. // 过时的
  2. ses.setCertificateVerifyProc(function (hostname, certificate, callback) {
  3. callback(true)
  4. })
  5. // 替换为
  6. ses.setCertificateVerifyProc(function (request, callback) {
  7. callback(0)
  8. })

Tray

  1. // 过时的
  2. tray.setHighlightMode(true)
  3. // 替换为
  4. tray.setHighlightMode('on')
  5. // 过时的
  6. tray.setHighlightMode(false)
  7. // 替换为
  8. tray.setHighlightMode('off')

webContents

  1. // 弃用
  2. webContents.openDevTools({ detach: true })
  3. // 替换为
  4. webContents.openDevTools({ mode: 'detach' })
  5. // 移除
  6. webContents.setSize(options)
  7. // 没有该API的替代

webFrame

  1. // 弃用
  2. webFrame.registerURLSchemeAsSecure('app')
  3. // 替换为
  4. protocol.registerStandardSchemes(['app'], { secure: true })
  5. // 弃用
  6. webFrame.registerURLSchemeAsPrivileged('app', { secure: true })
  7. // 替换为
  8. protocol.registerStandardSchemes(['app'], { secure: true })

<webview>

  1. // 移除
  2. webview.setAttribute('disableguestresize', '')
  3. // 没有该API的替代
  4. // 移除
  5. webview.setAttribute('guestinstance', instanceId)
  6. // 没有该API的替代
  7. // 键盘监听器在webview标签中不再起效
  8. webview.onkeydown = () => { /* handler */ }
  9. 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

  1. // 过时的
  2. let optionsA = { titleBarStyle: 'hidden-inset' }
  3. let windowA = new BrowserWindow(optionsA)
  4. //替换为
  5. let optionsB = { titleBarStyle: 'hiddenInset' }
  6. let windowB = new BrowserWindow(optionsB)

menu

  1. // 移除
  2. menu.popup(browserWindow, 100, 200, 2)
  3. // 替换为
  4. menu.popup(browserWindow, { x: 100, y: 200, positioningItem: 2 })

nativeImage

  1. // 移除
  2. nativeImage.toPng()
  3. // 替换为
  4. nativeImage.toPNG()
  5. // 移除
  6. nativeImage.toJpeg()
  7. // 替换为
  8. nativeImage.toJPEG()

process

  • process.versions.electronprocess.version.chrome 将成为只读属性, 以便与其他 process.versions 属性由Node设置。

webContents

  1. // 移除
  2. webContents.setZoomLevelLimits(1, 2)
  3. // 替换为
  4. webContents.setVisualZoomLevelLimits(1, 2)

webFrame

  1. // 移除
  2. webFrame.setZoomLevelLimits(1, 2)
  3. // 替换为
  4. webFrame.setVisualZoomLevelLimits(1, 2)

<webview>

  1. // 移除
  2. webview.setZoomLevelLimits(1, 2)
  3. // 替换为
  4. webview.setVisualZoomLevelLimits(1, 2)

重复的 ARM 资源

每个 Electron 发布版本包含两个相同的ARM版本,文件名略有不同,如electron-v1.7.3-linux-arm.zipelectron-v1.7.3-linux-armv7l.zip 添加包含v7l前缀的资源向用户明确其支持的ARM版本,并消除由未来armv6l 和 arm64 资源可能产生的歧义。

为了防止可能导致安装器毁坏的中断,不带前缀的文件仍然将被发布。 从2.0版本起,不带前缀的文件将不再发布。

更多详细情况,查看 69867189