跳到主要內容

Electron 22.0.0

·5 分鐘閱讀時間

Electron 22.0.0 已發布!它包含新的實用程序進程 API、Windows 7/8/8.1 支援的更新,以及 Chromium 108、V8 10.8 和 Node.js 16.17.1 的升級。請閱讀以下內容以了解更多詳細資訊!


Electron 團隊很高興宣布 Electron 22.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的 發行版本網站 下載。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 Twitter 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 issue tracker 中回報。

重點變更

堆疊變更

重點功能

UtilityProcess API #36089

新的 UtilityProcess 主進程模組允許創建一個輕量級的 Chromium 子進程,該進程僅整合 Node.js,同時也允許使用 MessageChannel 與沙盒化的渲染器進行通訊。此 API 的設計基於 Node.js child_process.fork,以便於過渡,主要區別在於入口點 modulePath 必須來自封裝的應用程式內部,以僅允許載入受信任的腳本。此外,該模組預設會阻止與渲染器建立通訊通道,從而維護主進程是應用程式中唯一受信任進程的契約。

您可以在我們的文件中閱讀更多關於 新的 UtilityProcess API 的資訊。

Windows 7/8/8.1 支援更新

資訊

2023/02/16:關於 Windows Server 2012 支援的更新

上個月,Google 宣布 Chrome 109 將繼續接收針對 Windows Server 2012 和 Windows Server 2012 R2 的重要安全性修復,直到 2023 年 10 月 10 日。因此,Electron 22 (Chromium 108) 計劃的終止支援日期將從 2023 年 5 月 30 日延長至 2023 年 10 月 10 日。Electron 團隊將繼續將此計畫中的任何安全性修復反向移植到 Electron 22,直到 2023 年 10 月 10 日。

請注意,我們不會為 Windows 7/8/8.1 進行額外的安全性修復。此外,如先前宣布,Electron 23 (Chromium 110) 將僅在 Windows 10 及更高版本上運行。

Electron 22 將是最後一個支援 Windows 7/8/8.1 的 Electron 主要版本。Electron 遵循計劃的 Chromium 棄用政策,該政策將在 Chromium 109 中棄用 Windows 7/8/8.1 支援 (在此處閱讀更多資訊)

Windows 7/8/8.1 將不會在 Electron 23 及更高版本的主要版本中受到支援。

其他重點變更

  • 新增了在 Linux 和 Windows 上對 Web Bluetooth pin 配對的支援。 #35416
  • 新增了 LoadBrowserProcessSpecificV8Snapshot 作為一個新的熔斷器,它將允許主/瀏覽器進程從 browser_v8_context_snapshot.bin 的檔案中載入其 v8 快照。任何其他進程都將使用與今天使用的相同的路徑。 #35266
  • 新增了 WebContents.opener 以存取視窗開啟器,以及 webContents.fromFrame(frame) 以取得對應於 WebFrameMain 實例的 WebContents。 #35140
  • 透過新的會期處理程序 ses.setDisplayMediaRequestHandler,新增了對 navigator.mediaDevices.getDisplayMedia 的支援。 #30702

重大 API 變更

以下是在 Electron 22 中引入的重大變更。您可以在 計劃的重大變更 頁面上閱讀更多關於這些變更和未來變更的資訊。

已棄用:webContents.incrementCapturerCount(stayHidden, stayAwake)

webContents.incrementCapturerCount(stayHidden, stayAwake) 已被棄用。現在當頁面捕獲完成時,它會由 webContents.capturePage 自動處理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已棄用:webContents.decrementCapturerCount(stayHidden, stayAwake)

webContents.decrementCapturerCount(stayHidden, stayAwake) 已被棄用。現在當頁面捕獲完成時,它會由 webContents.capturePage 自動處理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已移除:WebContents new-window 事件

WebContents 的 new-window 事件已被移除。它已被 webContents.setWindowOpenHandler() 取代。

- webContents.on('new-window', (event) => {
- event.preventDefault()
- })

+ webContents.setWindowOpenHandler((details) => {
+ return { action: 'deny' }
+ })

已棄用:BrowserWindow scroll-touch-* 事件

BrowserWindow 上的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件已被棄用。請改為使用 WebContents 上新提供的 input-event 事件

// Deprecated
- win.on('scroll-touch-begin', scrollTouchBegin)
- win.on('scroll-touch-edge', scrollTouchEdge)
- win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+ win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') {
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+ })

終止對 19.x.y 的支援

根據專案的 支援政策,Electron 19.x.y 已達到終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E19 (May'22)E20 (Aug'22)E21 (Sep'22)E22 (Nov'22)E23 (Jan'23)
19.x.y20.x.y21.x.y22.x.y23.x.y
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y

下一步

Electron 專案將在 2022 年 12 月暫停,並於 2023 年 1 月恢復。更多資訊可以在 十二月關閉部落格文章 中找到。

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要組件 (包括 Chromium、Node.js 和 V8) 的開發進度。

您可以在 此處找到 Electron 的公開時程表

有關未來變更的更多資訊可以在 計劃的重大變更 頁面上找到。