跳到主要內容

Electron 35.0.0

·5 分鐘閱讀

Electron 35.0.0 已發佈!它包含 Chromium 134.0.6998.44、V8 13.5 和 Node 22.14.0 的升級。


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

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

重大變更

Service Worker 預先載入腳本以改進擴充功能支援

最初由 RFC #8@samuelmaddock 提出,Electron 35 新增了將預先載入腳本附加到 Service Workers 的能力。隨著 Chrome 的 Manifest V3 擴充功能將大量工作路由到 擴充功能 service workers,此功能填補了 Electron 對現代 Chrome 擴充功能支援的空白。

當在 Session 層級以程式設計方式註冊預先載入腳本時,您現在可以使用 ses.registerPreloadScript(script) API 將其特別應用於 Service Worker 環境。

主程序
// Add our preload realm script to the session.
session.defaultSession.registerPreloadScript({
// Our script should only run in service worker preload realms.
type: 'service-worker',
// The absolute path to the script.
script: path.join(__dirname, 'extension-sw-preload.js'),
});

此外,現在可以透過 ServiceWorkerMain.ipc 類別在 Service Worker 及其附加的預先載入腳本之間使用 IPC。預先載入腳本仍將使用 ipcRenderer 模組與其 Service Worker 通訊。有關更多詳細資訊,請參閱原始 RFC。

此功能之前有許多其他變更為其奠定了基礎

  • #45329 重新設計了 Session 模組的預先載入 API,以支援註冊和取消註冊個別預先載入腳本。
  • #45229 新增了實驗性的 contextBridge.executeInMainWorld(executionScript) 腳本,以在 context bridge 上評估主世界中的 JavaScript。
  • #45341 新增了 ServiceWorkerMain 類別,以在主程序中與 Service Worker 互動。

堆疊變更

Electron 35 將 Chromium 從 132.0.6834.83 升級到 134.0.6998.44,將 Node 從 20.18.1 升級到 22.14.0,並將 V8 從 13.2 升級到 13.5

新功能

  • Info.plist 中新增 NSPrefersDisplaySafeAreaCompatibilityMode = false,以從應用程式選項中移除「縮放以適合內建相機下方」。#45357 (也包含在 v34.1.0 中)
  • 新增 ServiceWorkerMain 類別,以在主程序中與 service worker 互動。#45341
    • ServiceWorkers 上新增 running-status-changed 事件,以指示 service worker 的執行狀態何時變更。
    • ServiceWorkers 上新增 startWorkerForScope,以啟動可能先前已停止的 worker。
  • 新增實驗性的 contextBridge.executeInMainWorld,以安全地跨世界邊界執行程式碼。#45330
  • frame 新增至 'console-message' 事件。#43617
  • 在 Windows 上新增 query-session-end 事件並改進 session-end 事件。#44598
  • 新增 view.getVisible()#45409
  • 新增 webContents.navigationHistory.restore(index, entries) API,允許還原導覽歷史記錄。#45583
  • 將可選的動畫參數新增至 BrowserWindow.setVibrancy#35987
  • 新增對 document.executeCommand("paste") 的權限支援。#45471 (也包含在 v34.1.0 中)
  • 在 Windows 上新增對 roundedCorners BrowserWindow 建構函式選項的支援。#45740 (也包含在 v34.3.0 中)
  • 新增對 service worker 預先載入腳本的支援。#45408
  • 支援 Portal 的 globalShortcuts。Electron 必須使用 --enable-features=GlobalShortcutsPortal 執行,才能使該功能正常運作。#45297

重大變更

已移除:PrinterInfo 上的 isDefaultstatus 屬性

這些屬性已從 PrinterInfo 物件中移除,因為它們已從上游 Chromium 中移除。

已棄用:session.serviceWorkers 上的 getFromVersionID

session.serviceWorkers.fromVersionID(versionId) API 已棄用,改用 session.serviceWorkers.getInfoFromVersionID(versionId)。進行此變更的目的是更清楚地了解傳回哪個物件,同時也引入了 session.serviceWorkers.getWorkerFromVersionID(versionId) API。

// Deprecated
session.serviceWorkers.fromVersionID(versionId);

// Replace with
session.serviceWorkers.getInfoFromVersionID(versionId);

已棄用:Session 上的 setPreloadsgetPreloads

引入 registerPreloadScriptunregisterPreloadScriptgetPreloadScripts 作為已棄用方法的替代方案。這些新的 API 允許第三方程式庫註冊預先載入腳本,而無需取代現有的腳本。此外,新的 type 選項允許超出 frame 的其他預先載入目標。

// Deprecated
session.setPreloads([path.join(__dirname, 'preload.js')]);

// Replace with:
session.registerPreloadScript({
type: 'frame',
id: 'app-preload',
filePath: path.join(__dirname, 'preload.js'),
});

已棄用:WebContentsconsole-message 事件中的 levelmessagelinesourceId 引數

WebContents 上的 console-message 事件已更新,以提供有關 Event 引數的詳細資訊。

// Deprecated
webContents.on(
'console-message',
(event, level, message, line, sourceId) => {},
);

// Replace with:
webContents.on(
'console-message',
({ level, message, lineNumber, sourceId, frame }) => {},
);

此外,level 現在是字串,可能的值為 infowarningerrordebug

行為已變更:WebRequestFilterurls 屬性。

先前,空的 urls 陣列被解讀為包含所有 URL。若要明確包含所有 URL,開發人員現在應使用 <all_urls> 模式,這是一個 指定的 URL 模式,可比對每個可能的 URL。此變更闡明了意圖,並確保更可預測的行為。

// Deprecated
const deprecatedFilter = {
urls: [],
};

// Replace with
const newFilter = {
urls: ['<all_urls>'],
};

已棄用:systemPreferences.isAeroGlassEnabled()

systemPreferences.isAeroGlassEnabled() 函數已棄用,且沒有替代方案。自 Electron 23 以來,它一直傳回 true,Electron 23 僅支援 Windows 10+,在 Windows 10+ 中,DWM 合成已無法停用。

https://learn.microsoft.com/en-us/windows/win32/dwm/composition-ovw#disabling-dwm-composition-windows7-and-earlier

終止支援 32.x.y

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

E35 (25 年 3 月)E36 (25 年 4 月)E37 (25 年 6 月)
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y

下一步

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

您可以在這裡找到 Electron 的公開時程表

有關未來變更的更多資訊,請參閱 計畫的重大變更 頁面。

Google 程式碼夏日祭 2025

·5 分鐘閱讀

Electron 再次被接受為 Google 程式碼夏日祭 (GSoC) 2025 的指導組織!Google 程式碼夏日祭是一個全球性計畫,旨在將新的貢獻者帶入開放原始碼軟體開發。

有關該計畫的更多詳細資訊,請造訪 Google 的 程式碼夏日祭首頁

關於我們

Electron 是一個 JavaScript 框架,用於使用 Web 技術建置跨平台桌面應用程式。核心 Electron 框架是一個使用 ChromiumNode.js 建置的已編譯二進位可執行檔,主要以 C++ 編寫。

在 Electron 核心儲存庫之外,我們還維護多個專案以支援 Electron 生態系統,包括

作為 GSoC 貢獻者,您將有機會與 Electron 的一些核心貢獻者合作,參與 github.com/electron umbrella 下的眾多專案之一。

申請前

如果您對 Electron 不太熟悉,我們建議您從閱讀 文件 並嘗試 Electron Fiddle 中的一些範例開始。

若要深入了解如何發佈 Electron 應用程式,請嘗試使用 Electron Forge 建立範例應用程式

npm init electron-app@latest my-app

在稍微熟悉程式碼後,請加入 Electron Discord 伺服器 上的對話。

資訊

如果您是第一次參加 Google 程式碼夏日祭,或者您是開放原始碼新手,我們建議您在與社群互動之前,先閱讀 Google 的 貢獻者指南

專案貢獻

我們鼓勵您查看與您感興趣的專案構想相關的任何儲存庫。進行研究的一種方法是透過回報錯誤、分類現有 issue 或提交提取請求來做出貢獻。這樣做是獲得程式碼庫實務經驗的有效方法,但並非提案提交的必要條件。一份精心擬定的提案應能夠展現您對程式碼的理解,而無需參考過去的貢獻。

如果您希望在提交提案之前為 Electron 做出貢獻,以下是一些訣竅

  1. 提交貢獻時,請提供描述性的 issue 或 PR 描述。無論程式碼本身如何,在貢獻的書面部分投入精力向我們表明,您可以在協作環境中成為有效的溝通者。
  2. PR 隨時歡迎針對開放 issue。您無需在 issue 上留言詢問維護者是否可以將您指派給它。請注意,如果您需要完善解決方案的想法,我們仍然鼓勵您在 issue 上討論潛在的解決方案,但嚴格詢問您是否可以處理某些問題的評論是多餘的,並且會增加 issue 追蹤器的雜訊。
  3. 低努力的專案貢獻 (例如,無效的 issue 回報、儲存庫 README 中的瑣碎措辭變更,或對前端程式碼的次要樣式變更) 將對您的最終提案產生負面影響,因為它們佔用了有限的維護者時間,並且沒有為 Electron 專案提供任何淨效益。
  4. 雖然 AI 程式碼助理可以是偵錯和理解新概念的有效工具,但我們強烈不鼓勵直接從 AI 產生的輸出複製/貼上的貢獻。這些貢獻通常品質低下,維護者清理從 LLM 產生的程式碼通常比我們完全拒絕 PR 更費力。

擬定您的提案

有興趣與 Electron 合作嗎?首先,查看我們準備的 七個專案構想草案。所有列出的構想都開放提案。

如果您有不在清單上的獨特構想,我們願意考慮,但請確保您的提案詳細且經過徹底概述。如有疑問,我們建議堅持使用我們列出的構想。

您的申請應包含

  • 一份詳細的提案,概述您計畫在夏季完成的工作。
  • 您作為開發人員的背景。如果您有履歷,請附上一份副本。否則,請告訴我們您過去的技術經驗。
    • 在某些領域缺乏經驗不會使您喪失資格,但這將有助於我們的指導員制定計畫,以最好地支援您並確保您的夏季專案成功。

此處提供一份關於作為 Electron 應用程式一部分提交內容的詳細指南直接向 Google 程式碼夏日祭入口網站提交提案。以電子郵件發送給 Electron 團隊的提案將不被視為最終提交。

有關您的提案的更多指導,我們建議您遵循 此處提供的官方 Google 程式碼夏日祭提案寫作建議

申請將於 2025 年 3 月 24 日 開始,並於 2025 年 4 月 8 日 截止。

過去的專案提案

📚 針對 GSoC 2024,@piotrpdev 致力於將 API 歷史記錄新增至 Electron 核心文件。若要了解 Piotr 在與 Electron 共度的夏天中完成了哪些工作,請閱讀他在 2024 年 GSoC 計畫檔案 中的報告。

🔐 針對 GSoC 2022,@aryanshridhar 致力於在 Electron Fiddle 中啟用 Context Isolation。如果您想了解 Aryan 在與 Electron 共度的夏天中完成了哪些工作,您可以閱讀他在 2022 年 GSoC 計畫檔案 中的報告。

問題?

如果您有我們在此部落格文章中未解決的問題,或對您的提案草案有疑問,請發送電子郵件至 summer-of-code@electronjs.org 或查看 GSoC 常見問題。在發送電子郵件之前,請閱讀 我們的貢獻者指南

資源

Electron 34.0.0

·4 分鐘閱讀

Electron 34.0.0 已發佈!它包含 Chromium 132.0.6834.83、V8 13.2 和 Node 20.18.1 的升級。


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

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

重大變更

HTTP 壓縮共用字典管理 API

HTTP 壓縮允許 Web 伺服器在資料被瀏覽器接收之前對其進行壓縮。現代版本的 Chromium 支援 Brotli 和 Zstandard,它們是比 gzip 等舊方案更適合文字檔案的新壓縮演算法。

自訂共用字典進一步提高了 Brotli 和 Zstandard 壓縮的效率。有關更多資訊,請參閱 Chrome for Developers 部落格中有關共用字典的文章

@felixrieseberg#44950 中新增了以下 API,以管理 Session 層級的共用字典

  • session.getSharedDictionaryUsageInfo()
  • session.getSharedDictionaryInfo(options)
  • session.clearSharedDictionaryCache()
  • session.clearSharedDictionaryCacheForIsolationKey(options)

無回應的渲染器 JavaScript 呼叫堆疊

每當渲染器程序長時間掛起時,就會發生 Electron 的 unresponsive 事件。由 @samuelmaddock#44204 中新增的新 WebFrameMain.collectJavaScriptCallStack() API 允許您從關聯的 WebFrameMain 物件 (webContnets.mainFrame) 收集 JavaScript 呼叫堆疊。

在發生長時間執行的 JavaScript 事件導致程序掛起的情況下,此 API 可用於確定框架無回應的原因。有關更多資訊,請參閱 建議的 Web 標準 Crash Reporting API

主程序
const { app } = require('electron');

app.commandLine.appendSwitch(
'enable-features',
'DocumentPolicyIncludeJSCallStacksInCrashReports',
);

app.on('web-contents-created', (_, webContents) => {
webContents.on('unresponsive', async () => {
// Interrupt execution and collect call stack from unresponsive renderer
const callStack = await webContents.mainFrame.collectJavaScriptCallStack();
console.log('Renderer unresponsive\n', callStack);
});
});
警告

此 API 需要啟用 'Document-Policy': 'include-js-call-stacks-in-crash-reports' 標頭。有關更多詳細資訊,請參閱 #45356

堆疊變更

Electron 34 將 Chromium 從 130.0.6723.44 升級到 132.0.6834.83,將 Node 從 20.18.0 升級到 20.18.1,並將 V8 從 13.0 升級到 13.2

新功能

  • 新增 API 以管理共用字典,以提高使用 Brotli 或 ZStandard 的壓縮效率。新的 API 為 session.getSharedDictionaryUsageInfo()session.getSharedDictionaryInfo(options)session.clearSharedDictionaryCache()session.clearSharedDictionaryCacheForIsolationKey(options)#44950
  • 新增 WebFrameMain.collectJavaScriptCallStack() 以存取無回應渲染器的 JavaScript 呼叫堆疊。#44938
  • 為處於卸載狀態的框架新增 WebFrameMain.detached
    • 新增 WebFrameMain.isDestroyed() 以判斷框架是否已損毀。
    • 修正 webFrameMain.fromId(processId, frameId) 在框架卸載時傳回與給定參數不符的 WebFrameMain 執行個體。#43473
  • 在公用程式程序中新增錯誤事件,以支援 V8 嚴重錯誤的診斷報告。#43774
  • 功能:GPU 加速的共用紋理離螢幕渲染。#42953

重大變更

行為已變更:在 Windows 上全螢幕期間將隱藏功能表列

這使行為與 Linux 保持一致。先前的行為:在 Windows 上全螢幕期間功能表列仍然可見。新的行為:在 Windows 上全螢幕期間功能表列已隱藏。

更正:先前在 Electron 33 中將其列為重大變更,但實際上首次發佈是在 Electron 34 中。

終止支援 31.x.y

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

E34 (25 年 1 月)E35 (25 年 4 月)E36 (25 年 6 月)
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y

下一步

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

您可以在這裡找到 Electron 的公開時程表

有關未來變更的更多資訊,請參閱 計畫的重大變更 頁面。

將我們的生態系統移轉至 Node 22

·2 分鐘閱讀

在 2025 年初,Electron 的 npm 生態系統儲存庫 (在 @electron/@electron-forge/ 命名空間下) 將移至 Node.js 22 作為最低支援版本。


這代表什麼?

過去,Electron 的 npm 生態系統 (Forge、Packager 等) 中的套件已盡可能長時間地支援 Node 版本,即使在版本達到其生命週期結束 (EOL) 日期之後也是如此。這樣做是為了確保我們不會使生態系統碎片化 — 我們了解許多專案都依賴舊版本的 Node,除非有迫切的升級理由,否則我們不想冒著讓這些專案擱淺的風險。

隨著時間的推移,將 Node.js 14 作為我們的最低版本變得越來越困難,原因如下

  • 缺少官方 Node.js 14 macOS ARM64 建置,需要我們維護 CI 基礎架構變通方案以提供完整的測試涵蓋範圍。
  • 上游套件相依性的 engines 需求已向前推進,使得使用相依性提升來解決供應鏈安全問題變得越來越困難。

此外,較新版本的 Node.js 包含許多我們想要利用的改進,例如執行階段原生通用公用程式 (例如 fs.globutil.parseArgs) 和全新的內建模組 (例如 node:testnode:sqlite)。

為何現在升級?

在 2024 年 7 月,Electron 的生態系統工作小組決定將所有套件升級到最早的 Node 版本,以支援同步 ESM 圖表的 require()(請參閱 nodejs/node#51977nodejs/node#53500),升級時間點將在該版本達到 LTS 日期之後的未來。

我們已決定將更新時間設定為 2025 年 1 月/2 月。在此升級發生後,Node 22 將成為現有生態系統套件中支援的最低版本。

我需要採取什麼行動?

我們將盡力保持盡可能高的相容性。然而,為了確保最佳支援,我們鼓勵您將應用程式升級到 Node 22 或更高版本。

請注意,專案中執行的 Node 版本與嵌入到目前 Electron 版本中的 Node 版本無關。

接下來是什麼?

如果您有任何問題或疑慮,請隨時寫信至 info@electronjs.org 與我們聯繫。您也可以在我們的官方 Electron Discord 中找到社群支援。

十二月靜默月 (24 年 12 月)

·一分鐘閱讀

Electron 專案將在 2024 年 12 月暫停,然後在 2025 年 1 月恢復全速運作。

via GIPHY


12 月會保持不變的事項

  1. 零時差漏洞和其他重大安全相關版本將在必要時發布。安全事件應透過 SECURITY.md 回報。
  2. 行為準則報告和審核將繼續進行。

12 月會有什麼不同

  1. 2024 年最後一年的穩定分支版本,包括 Electron 31、32 和 33,將在 12 月 1 日當週發布。12 月將不會有額外的計畫版本。
  2. 12 月最後兩週不會有 Nightly 和 Alpha 版本。
  3. 除了少數例外,不會有 Pull Request 審查或合併。
  4. 任何儲存庫都不會更新 Issue Tracker。
  5. 維護者不會在 Discord 上提供偵錯協助。
  6. 不會更新社群媒體內容。

2025 年見!

從 BrowserView 移轉至 WebContentsView

·3 分鐘閱讀

BrowserView 已自 Electron 30 起被棄用,並由 WebContentView 取代。值得慶幸的是,遷移過程相當輕鬆。


Electron 正在從 BrowserView 轉移到 WebContentsView,以與 Chromium 的 UI 框架 Views API 對齊。WebContentsView 提供了一個可重複使用的視圖,直接與 Chromium 的渲染管線繫結,簡化了未來的升級,並為開發人員整合非 Web UI 元素到其 Electron 應用程式開闢了可能性。透過採用 WebContentsView,應用程式不僅為即將到來的更新做好準備,還可以在長期內受益於降低程式碼複雜性和減少潛在錯誤。

熟悉 BrowserWindows 和 BrowserViews 的開發人員應注意,BrowserWindowWebContentsView 分別是繼承自 BaseWindowView 基礎類別的子類別。為了充分理解可用的實例變數和方法,請務必查閱這些基礎類別的文件。

遷移步驟

1. 升級 Electron 至 30.0.0 或更高版本

警告

Electron 版本更新可能包含會影響您應用程式的重大變更。最好在繼續進行此遷移的其餘步驟之前,在您的應用程式上測試並完成 Electron 升級。每個 Electron 主要版本的重大變更列表都可以在這裡以及 Electron 部落格上每個主要版本的發行說明中找到。

2. 熟悉您的應用程式使用 BrowserViews 的位置

一種方法是在您的程式碼庫中搜尋 new BrowserView(。這應該讓您了解您的應用程式如何使用 BrowserViews 以及有多少呼叫點需要遷移。

提示

在大多數情況下,您的應用程式實例化新的 BrowserViews 的每個實例都可以與其他實例隔離遷移。

3. 遷移 BrowserView 的每個用法

  1. 遷移實例化。這應該相當簡單,因為 WebContentsViewBrowserView 的建構函式基本上具有相同的形狀。兩者都透過 webPreferences 參數接受 WebPreferences

    - this.tabBar = new BrowserView({
    + this.tabBar = new WebContentsView({
    資訊

    預設情況下,WebContentsView 實例化時具有白色背景,而 BrowserView 實例化時具有透明背景。若要在 WebContentsView 中獲得透明背景,請將其背景顏色設定為 RGBA 十六進位值,並將 alpha(不透明度)通道設定為 00

    + this.webContentsView.setBackgroundColor("#00000000");
  2. 遷移 BrowserView 被新增到其父視窗的位置。

    - this.browserWindow.addBrowserView(this.tabBar)
    + this.browserWindow.contentView.addChildView(this.tabBar);
  3. 遷移父視窗上的 BrowserView 實例方法呼叫。

    舊方法新方法注意事項
    win.setBrowserViewwin.contentView.removeChildView + win.contentView.addChildView
    win.getBrowserViewwin.contentView.children
    win.removeBrowserViewwin.contentView.removeChildView
    win.setTopBrowserViewwin.contentView.addChildView在現有視圖上呼叫 addChildView 會將其重新排序到頂部。
    win.getBrowserViewswin.contentView.children
  4. setAutoResize 實例方法遷移到調整大小監聽器。

    - this.browserView.setAutoResize({
    - vertical: true,
    - })

    + this.browserWindow.on('resize', () => {
    + if (!this.browserWindow || !this.webContentsView) {
    + return;
    + }
    + const bounds = this.browserWindow.getBounds();
    + this.webContentsView.setBounds({
    + x: 0,
    + y: 0,
    + width: bounds.width,
    + height: bounds.height,
    + });
    + });
    提示

    所有現有的 browserView.webContents 用法和實例方法 browserView.setBoundsbrowserView.getBoundsbrowserView.setBackgroundColor 都不需要遷移,並且應該與 WebContentsView 實例開箱即用!

4. 測試並提交您的變更

遇到問題?檢查 Electron 的 Issue Tracker 上的 WebContentsView 標籤,看看您遇到的問題是否已被回報。如果您在那裡沒有看到您的問題,請隨時新增錯誤報告。包含測試案例 gist 將有助於我們更好地分類您的問題!

恭喜,您已遷移到 WebContentsViews! 🎉

Electron 33.0.0

·4 分鐘閱讀

Electron 33.0.0 已發布!它包含 Chromium 130.0.6723.44、V8 13.0 和 Node 20.18.0 的升級。


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

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

重大變更

重點

  • 新增了一個處理程序 app.setClientCertRequestPasswordHandler(handler),以協助在需要 PIN 時解鎖加密裝置。#41205
  • 擴展了 navigationHistory API,新增了 2 個新函數,以實現更好的歷史記錄管理。#42014
  • 改進了原生主題透明度檢查。#42862

堆疊變更

Electron 33 將 Chromium 從 128.0.6613.36 升級到 130.0.6723.44,將 Node 從 20.16.0 升級到 20.18.0,並將 V8 從 12.8 升級到 13.0

新功能

  • 新增了一個處理程序 app.setClientCertRequestPasswordHandler(handler),以協助在需要 PIN 時解鎖加密裝置。#41205
  • 在 Utility Process 中新增了錯誤事件,以支援 V8 嚴重錯誤的診斷報告。#43997
  • 新增了 View.setBorderRadius(radius),用於自訂視圖的邊框半徑,並與 WebContentsView 相容。#42320
  • 擴展了 navigationHistory API,新增了 2 個新函數,以實現更好的歷史記錄管理。#42014

重大變更

已移除:macOS 10.15 支援

macOS 10.15 (Catalina) 不再受 Chromium 支援。

舊版本的 Electron 將繼續在 Catalina 上執行,但需要 macOS 11 (Big Sur) 或更高版本才能執行 Electron v33.0.0 和更高版本。

行為變更:原生模組現在需要 C++20

由於上游的變更,V8Node.js 現在都要求 C++20 作為最低版本。使用原生 Node 模組的開發人員應使用 --std=c++20 而不是 --std=c++17 建置其模組。使用 gcc9 或更低版本的映像可能需要更新到 gcc10 才能編譯。請參閱 #43555 以取得更多詳細資訊。

行為變更:Windows 上的自訂協定 URL 處理

由於 Chromium 中為支援 Non-Special Scheme URLs 所做的變更,使用 Windows 檔案路徑的自訂協定 URL 將不再與已棄用的 protocol.registerFileProtocol 以及 BrowserWindow.loadURLWebContents.loadURL<webview>.loadURL 上的 baseURLForDataURL 屬性正確運作。protocol.handle 也將無法與這些類型的 URL 搭配使用,但這並非變更,因為它一直都是這樣運作。

// 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');

行為變更:apploginwebContents 屬性

當從使用 respondToAuthRequestsFromMainProcess 選項建立的 Utility Process 發出的請求觸發事件時,來自 applogin 事件中的 webContents 屬性將為 null

已棄用:BrowserWindowConstructorOption.type 中的 textured 選項

BrowserWindowConstructorOptionstypetextured 選項已被棄用,且沒有替代方案。此選項依賴於 macOS 上的 NSWindowStyleMaskTexturedBackground 樣式遮罩,該遮罩已被棄用且沒有替代方案。

已棄用:systemPreferences.accessibilityDisplayShouldReduceTransparency

systemPreferences.accessibilityDisplayShouldReduceTransparency 屬性現在已被棄用,而改用新的 nativeTheme.prefersReducedTransparency,它提供相同的資訊並且跨平台運作。

// Deprecated
const shouldReduceTransparency =
systemPreferences.accessibilityDisplayShouldReduceTransparency;

// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency;

終止對 30.x.y 的支援

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

E33 (24 年 10 月)E34 (25 年 1 月)E35 (25 年 4 月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y

下一步

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

您可以在這裡找到 Electron 的公開時程表

有關未來變更的更多資訊,請參閱 計畫的重大變更 頁面。

API 歷史記錄介紹 (GSoC 2024)

·7 分鐘閱讀

Electron API 的歷史變更現在將在文件中詳細說明。


嗨 👋,我是 Peter,2024 年 Google Summer of Code (GSoC) 對 Electron 的貢獻者。

在 GSoC 計畫期間,我為 Electron 文件及其函數、類別等實作了 API 歷史記錄功能,其方式與 Node.js 文件 類似:透過在 API 文件 Markdown 檔案中使用簡單但功能強大的 YAML 結構描述,並在 Electron 文件網站上精美地顯示它。

Electron 32.0.0

·4 分鐘閱讀

Electron 32.0.0 已發布!它包含 Chromium 128.0.6613.36、V8 12.8 和 Node 20.16.0 的升級。


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

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

重大變更

重點

  • 在我們的文件中新增了新的 API 版本歷史記錄,這是 @piotrpdev 作為 Google Summer of Code 的一部分建立的功能。您可以在 這篇部落格文章 中了解更多資訊。#42982
  • 從 Web File API 中移除非標準的 File.path 副檔名。#42053
  • 在嘗試在封鎖路徑中開啟檔案或目錄時,將 Web File System API 中的失敗路徑與上游對齊。#42993
  • 將以下現有的導航相關 API 新增到 webcontents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear。先前的導航 API 現在已棄用。#41752

堆疊變更

Electron 32 將 Chromium 從 126.0.6478.36 升級到 128.0.6613.36,將 Node 從 20.14.0 升級到 20.16.0,並將 V8 從 12.6 升級到 12.8

新功能

  • 新增了對響應從 Utility Process 透過 app 模組的 'login' 事件啟動的身份驗證請求的支援。#43317
  • cumulativeCPUUsage 屬性新增到 CPUUsage 結構,該結構傳回自程序啟動以來使用的 CPU 時間總秒數。#41819
  • 將以下現有的導航相關 API 新增到 webContents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 擴展了 WebContentsView 以接受預先存在的 webContents 物件。#42086
  • nativeTheme 新增了一個新的屬性 prefersReducedTransparency,它指示使用者是否已選擇透過系統輔助功能設定來降低作業系統級別的透明度。#43137
  • 在嘗試在封鎖路徑中開啟檔案或目錄時,將檔案系統存取 API 中的失敗路徑與上游對齊。#42993
  • 在 Linux 上啟用了 Windows 控制項覆蓋 API。#42681
  • 在網路請求中啟用了 zstd 壓縮。#43300

重大變更

已移除:File.path

Web File 物件的非標準 path 屬性是在早期版本的 Electron 中新增的,作為一種便利方法,用於在 Renderer 中完成所有操作時處理原生檔案。但是,它代表了對標準的偏離,並且也構成輕微的安全風險,因此從 Electron 32.0 開始,它已被移除,而改用 webUtils.getPathForFile 方法。

// Before (renderer)
const file = document.querySelector('input[type=file]');
alert(`Uploaded file path was: ${file.path}`);
// After (renderer)
const file = document.querySelector('input[type=file]');
electron.showFilePath(file);

// After (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}`);
},
});

已棄用:WebContents 上的 clearHistorycanGoBackgoBackcanGoForwardgoForwardgoToIndexcanGoToOffsetgoToOffset

WebContents 實例上的導航相關 API 現在已棄用。這些 API 已移至 WebContentsnavigationHistory 屬性,以提供更結構化和直觀的介面來管理導航歷史記錄。

// 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);

行為變更:userData 中的目錄 databases 將被刪除

如果您在 app.getPath('userData') 傳回的目錄中有一個名為 databases 的目錄,則在首次執行 Electron 32 時將會刪除它。databases 目錄由 WebSQL 使用,WebSQL 已在 Electron 31 中移除。Chromium 現在執行清理以刪除此目錄。請參閱 issue #45396

終止對 29.x.y 的支援

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

E32 (24 年 8 月)E33 (24 年 10 月)E34 (25 年 1 月)
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y

下一步

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

您可以在這裡找到 Electron 的公開時程表

有關未來變更的更多資訊,請參閱 計畫的重大變更 頁面。

Electron 31.0.0

·3 分鐘閱讀

Electron 31.0.0 已發布!它包含 Chromium 126.0.6478.36、V8 12.6 和 Node 20.14.0 的升級。


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

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

重大變更

重點

  • 擴展了 WebContentsView 以接受預先存在的 webContents 物件。#42319
  • 新增了對 NODE_EXTRA_CA_CERTS 的支援。#41689
  • 更新了 window.flashFrame(bool) 以在 macOS 上持續閃爍。#41391
  • 移除了 WebSQL 支援 #41868
  • nativeImage.toDataURL 將保留 PNG 色彩空間 #41610
  • 擴展了 webContents.setWindowOpenHandler 以支援手動建立 BrowserWindow。#41432

堆疊變更

Electron 31 將 Chromium 從 124.0.6367.49 升級到 126.0.6478.36,將 Node 從 20.11.1 升級到 20.14.0,並將 V8 從 12.4 升級到 12.6

新功能

  • Session 新增了 clearData 方法。#40983
    • Session.clearData API 新增了 options 參數。#41355
  • 新增了對 navigator.serial 中依服務類別 ID 請求藍牙連接埠的支援。#41638
  • 新增了對 Node 的 NODE_EXTRA_CA_CERTS 環境變數的支援。#41689
  • 擴展了 webContents.setWindowOpenHandler 以支援手動建立 BrowserWindow。#41432
  • 實作了對 Web 標準 File System API 的支援。#41419
  • 擴展了 WebContentsView 以接受預先存在的 WebContents 實例。#42319
  • 在 webContents API 上新增了一個新的實例屬性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使應用程式能夠檢索瀏覽歷史記錄中任何導航條目的 URL 和標題。#41577 (也在 29, 30 中)

重大變更

已移除:WebSQL 支援

Chromium 已在上游移除了對 WebSQL 的支援,並將其轉移到僅限 Android。請參閱 Chromium 移除討論意向 以取得更多資訊。

行為變更:nativeImage.toDataURL 將保留 PNG 色彩空間

PNG 解碼器實作已變更為保留色彩空間資料。從此函數傳回的編碼資料現在與其相符。

請參閱 crbug.com/332584706 以取得更多資訊。

行為變更:win.flashFrame(bool) 將在 macOS 上持續閃爍 Dock 圖示

這使行為與 Windows 和 Linux 保持一致。先前的行為:第一個 flashFrame(true) 只會彈跳 Dock 圖示一次(使用 NSInformationalRequest 層級),而 flashFrame(false) 則不執行任何操作。新的行為:持續閃爍直到呼叫 flashFrame(false) 為止。這改為使用 NSCriticalRequest 層級。若要明確使用 NSInformationalRequest 以導致單次 Dock 圖示彈跳,仍然可以使用 dock.bounce('informational')

終止對 28.x.y 的支援

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

E31 (24 年 6 月)E32 (24 年 8 月)E33 (24 年 10 月)
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y
28.x.y29.x.y31.x.y

下一步

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

您可以在這裡找到 Electron 的公開時程表

有關未來變更的更多資訊,請參閱 計畫的重大變更 頁面。